<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          為什么你應(yīng)該用Yarn而不是Npm來管理你的項目依賴?

          共 2729字,需瀏覽 6分鐘

           ·

          2021-11-19 22:41

          作者:張京??

          鏈接:https://segmentfault.com/a/1190000016497047

          因為Yarn有離線安裝的功能,特別是在國內(nèi)網(wǎng)絡(luò)環(huán)境不大好的情況下,這個功能尤為有用。

          問題

          我們經(jīng)常遇到的一種情況是:你設(shè)置好了你的網(wǎng)絡(luò),順利地安裝好了一切依賴,寫好了package.jsonnpm給你自動生成了一個package-lock.json,在你的電腦上沒有問題,但是你上傳到git,再交給別的同學(xué)或者上傳到服務(wù)器的時候,他們卻怎么npm install也不成功了,這是因為為了確保一致性,npmpackage-lock.json里寫明了每一個包的網(wǎng)絡(luò)下載路徑,而你同學(xué)的網(wǎng)絡(luò)環(huán)境沒有你這里好,所以你能成功下載的東西到他這里就下載不了了,結(jié)果為了這個網(wǎng)絡(luò)設(shè)置又要折騰很長時間,雖然說國內(nèi)也有淘寶鏡象的cnpm這樣的替代品,但也不時出現(xiàn)各種奇怪現(xiàn)象,還是不如正宗的npm順暢。

          Yarn

          為了徹底解決這個問題,我們需要用到Yarn

          Yarn的初始安裝很簡單:

          brew?install?yarn

          執(zhí)行就更簡單:

          yarn

          這時它會生成一個yarn.lock的文件,這個文件的內(nèi)容和npm生成的package-lock.json文件很像,也包含了各個依賴包的網(wǎng)絡(luò)下載路徑(實際上,npmpackage-lock.json這個概念就是從yarn借鑒過來的)。然后你可以執(zhí)行yarn start來啟動開發(fā)環(huán)境,或者yarn run build來執(zhí)行編譯,npm能執(zhí)行什么命令,yarn也可以。至此為止,似乎沒有看到yarn有什么神奇之處。

          離線

          下面我們開始為yarn設(shè)置離線安裝環(huán)境,這才是yarn最精彩的地方。

          為了能有一個地方存儲yarn下載下來的安裝包,我們需要設(shè)置一個與項目和機器徹底無關(guān)的文件夾,假定我們就在電腦的根目錄下存儲這些文件,我們首先建立一個文件夾,允許別人訪問它:

          sudo?mkdir?/Projects
          sudo?chmod?777?/Projects

          然后,我們告訴yarn到這里來存儲和讀取離線安裝包:

          yarn?config?set?yarn-offline-mirror?/Projects/yarn-offline-mirror

          這時候,yarn會在你當(dāng)前用戶的根目錄下生成一個.yarnrc的文件,你可以把這個文件搬到你項目的根目錄下:

          mv?~/.yarnrc?./

          這個文件的內(nèi)容很短,打開來看一下:

          \#?THIS?IS?AN?AUTOGENERATED?FILE.?DO?NOT?EDIT?THIS?FILE?DIRECTLY.
          #?yarn?lockfile?v1

          lastUpdateCheck?1520049128107
          yarn-offline-mirror?"/Projects/yarn-offline-mirror"

          它的大意是說這是一個自動生成的文件,你不應(yīng)該直接修改文件內(nèi)容(不過其實如果你知道你在干的是什么的,修改也是沒有關(guān)系的,畢竟不是二進制文件)。這里面就列出了我們離線包的存儲位置。

          接下來我們開始往我們的離線文件夾灌入內(nèi)容。我們先把我們當(dāng)前項目的node_modules文件夾和yarn.lock文件刪除:

          rm?-rf?node\_modules/?yarn.lock

          然后,我們執(zhí)行一下

          yarn?install

          這時候你會看到yarn不但重新生成了node_modules文件夾和yarn.lock文件,并且把下載下來的安裝包全都放入了我們剛才設(shè)定好的離線安裝路徑/Projects/yarn-offline-mirror

          驗證

          我們怎么驗證yarn確實可以離線安裝呢?我們還是先把node_modules文件夾刪掉,注意,這次不要再刪yarn.lock文件了:

          rm?-rf?node\_modules

          為了徹底起見,我們把yarn的緩存也刪掉:

          yarn?cache?clean

          然后,我們把wifi關(guān)掉,把網(wǎng)線拔掉,然后我們再執(zhí)行:

          yarn?install?-offline

          成功了!在沒有任何網(wǎng)絡(luò)的情況下,我們繼續(xù)可以重建node_modules文件夾,它取的就是我們剛才設(shè)定好的/Projects/yarn-offline-mirror里的內(nèi)容。

          意義

          那么這有什么意義呢?僅僅如此還是不夠的,我們需要把整個yarn-offline-mirror上傳到我們自己的git庫里,為它單獨建一個庫,這樣我們的多個項目就可以共享這同一個yarn-offline-mirror,而不必浪費太多的空間。并且由于這是在我們自己的文件系統(tǒng)中,如果是在服務(wù)器端或者其他同事的電腦中執(zhí)行yarn install -offline的話,它也不會再去訪問npm的官方網(wǎng)站獲取安裝包,畢竟那樣訪問不通的概率很大,在中國目前這種網(wǎng)絡(luò)環(huán)境下。

          這么麻煩,為什么我不直接把整個node_modules文件夾放入git庫呢?這不也是一樣的效果嗎?某種意義上說,的確是這樣的,但是node_modules里存儲的是解壓縮之后的所有文件,動輒幾萬甚至幾十萬個文件都很常見,所以通常我們在建項目的時候是把node_modules文件夾放在.gitignore文件中忽略掉的。而yarn-offline-mirror里存放的是安裝包本身,是未經(jīng)解壓縮的.tgz文件,一般一個項目幾十最多幾百個文件就夠了,這樣對于我們的git服務(wù)器的管理也是一件好事,所以我們可以把它放在git里管理起來。

          參考

          你可以更進一步了解一下官方介紹[1],如果你感興趣的話。

          參考資料

          [1]

          官方介紹: https://link.segmentfault.com/?enc=VipAurZli94mQ3xdTQiueA%3D%3D.YwZ5nny1UUsmZVqMPqQAhUy8jOnIJ%2FV3t8mMwvPMuMt3ngel3ByghgGIkzjVOJJXpD9Vu3w%2F4FAo50fU6yJ%2F%2Bg%3D%3D

          最后



          如果你覺得這篇內(nèi)容對你挺有啟發(fā),我想邀請你幫我三個小忙:

          1. 點個「在看」,讓更多的人也能看到這篇內(nèi)容(喜歡不點在看,都是耍流氓 -_-)

          2. 歡迎加我微信「qianyu443033099」拉你進技術(shù)群,長期交流學(xué)習(xí)...

          3. 關(guān)注公眾號「前端下午茶」,持續(xù)為你推送精選好文,也可以加我為好友,隨時聊騷。


          點個在看支持我吧,轉(zhuǎn)發(fā)就更好了


          瀏覽 43
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚色综合网 | 亚洲天堂在线免费观看 | 欧美视频在线网址 | 午夜操一操一级 | 青青草黄色成人视频 |