摘要:鮮花總需要綠葉襯托的,對比的包依賴管理,頓時覺得包依賴機(jī)制真是漂亮。此文不吐槽的包管理是如何難用和混亂,也不去抨擊包管理的孱弱,僅僅討論如何優(yōu)雅地使用進(jìn)行包依賴管理。
鮮花總需要綠葉襯托的,對比php, java, python的包依賴管理,頓時覺得nodejs包依賴機(jī)制真是漂亮。此文不吐槽python的包管理是如何難用和混亂,也不去抨擊php包管理的孱弱,僅僅討論如何優(yōu)雅地使用npm進(jìn)行包依賴管理。
告別npm2.x,擁抱 npm3.x+升級到3.x執(zhí)行以下命令:
npm install -g npm@3
先上圖
圖中A和C都依賴了B,但是A依賴的是B v1.0,但是C依賴的是B v2.0,在npm2里面直接就是把B的分別放在A的node_modules文件夾里面,而npm3的處理方式是把B v1.0抽離出來作為一個多帶帶的模塊,而C所依賴的B v2.0則多帶帶放到C中。
在實際項目中,npm2會產(chǎn)生了大量冗余的引用,node_modules也會很大,npm3把結(jié)構(gòu)扁平化了,實際上項目依賴的版本已經(jīng)十分一致,像C多帶帶依賴Bv2.0這種情況不多,所以npm3處理的node_modules體積小,效率更高。而且npm3.x是兼容npm2.x的,并無后顧之憂。
注意版本號的控制方式深入可以閱讀文檔:http://www.alloyteam.com/2016...
打開package.json這個文件,往往會看到dependencies中定義了一大堆的依賴,形式一般有以下幾種:
*: 任意版本
1.1.0: 指定版本
~1.1.0: >=1.1.0 && < 1.2.0
^1.1.0: >=1.1.0 && < 2.0.0
上面的規(guī)則已經(jīng)很清晰地表述了各種符號代表的意思。
那么我們回到使用場景中,什么時候我們會鎖定版本,什么時候會用~,什么時候會用^?
我的理解如下:
(1)如果對依賴的包的穩(wěn)定性要求極高,不希望有任何的更新,那么就要鎖定版本。
1.1 項目中核心的包建議都鎖住某一穩(wěn)定版本,例如react的項目中,react的版本就應(yīng)該被鎖定。沒有經(jīng)過完整的測試之前,不能隨意升級版本,即使是小版本升級也不允許。
1.2 如果明知道包的開發(fā)者不穩(wěn)定,經(jīng)常會更新一下不穩(wěn)定的版本,那么也需要鎖住版本,例如antd;
(2) 如果希望依賴包在小幅范圍內(nèi)升級,并且確信不會影響穩(wěn)定性,又能得益更新帶來的好處,那么可以用~符號
(3) 如果對包的穩(wěn)定性要求不高,確信不是大版本更新都不會影響穩(wěn)定性,那么久可以用^符號,不過要慎重;
開源項目一般都使用~或者^符號來管理版本
注意從npm2升級到npm3需要刪除舊的node_modules文件夾感興趣的同學(xué)可以閱讀以下文檔:
論版本號的正確打開方式:http://taobaofed.org/blog/201...
盡管npm3會兼容npm2,但是歷史遺留問題往往讓人防不勝防,最好的方式莫過于抹去舊的,放進(jìn)新的。就譬如,昨天晚上留下了茶水,今天再把新泡的茶沖進(jìn)去,味道也沒有新茶好,甚至?xí)亲印?/p>
上面的文字已經(jīng)闡述了npm2和npm3的機(jī)制,看起來是沒有問題的,請注意C中引用Bv2,是把B v2放在C的node_modules文件夾中,新舊切換時就要考慮npm引用包的順序,如果一個包下面有node_modules文件夾,npm會優(yōu)先查找node_modules里面的包,然后再到外層,最后到全局。這是時候npm2的殘留是那么頑固,因為它是把依賴放在自己node_modules文件夾下面的。對此,別無更好的辦法,除非刪掉,重新install。因此在發(fā)布和構(gòu)建是一定要注意npm的版本,要考慮2到3切換時可能帶來的風(fēng)險。筆者已經(jīng)吃過這方面的虧了。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/91683.html
摘要:典型的使用場景比如做前端開發(fā)的同學(xué)可以利用這個工具把開發(fā)環(huán)境的服務(wù)提供給或者驗收使用。內(nèi)置的工具有,但是較之更優(yōu)。 本文共 1689 字,讀完約需 4 分鐘,速讀需 1 分鐘 NodeJS 自誕生以來,社區(qū)的發(fā)展速度超出了所有人的想象,現(xiàn)在甚至可以被用來做諸如智能硬件、人臉識別的很多事情。在各種軟件工程工作流中實現(xiàn)自動化,比如 APP 打包、WEB 開發(fā)方面自然也少不了它。根據(jù)我個人的...
摘要:概述在的項目中,我們可以通過來安裝依賴包,但是不像,默認(rèn)安裝的依賴包會掛在全局上,不利于項目工程協(xié)作。這時候需要一款類似的工具記錄我們的項目依賴。項目下會出現(xiàn)一個文件,對應(yīng)的用于記錄項目依賴信息。 概述 在Python的項目中,我們可以通過pip來安裝依賴包,但是不像npm install,pip默認(rèn)安裝的依賴包會掛在全局上,不利于項目工程協(xié)作。showImg(https://segm...
摘要:安裝依賴于和,如果要使用它需要先安裝和,因為包含,所以只需要安裝即可。安裝配置文件作用類似于,執(zhí)行時會依據(jù)這個配置文件更新庫配置文件必須,如果需要注冊包,則該包名唯一。 Bower是什么東西? 一個前端包管理工具。能夠幫我們管理Web站點上的各種框架,類庫等等。主要作用有如下:能夠幫助我們跟蹤前端包,并且保證他們是最新(或者是你指定的特定版本),Bower能夠管理前端里面的HTML,C...
摘要:安裝依賴于和,如果要使用它需要先安裝和,因為包含,所以只需要安裝即可。安裝配置文件作用類似于,執(zhí)行時會依據(jù)這個配置文件更新庫配置文件必須,如果需要注冊包,則該包名唯一。 Bower是什么東西? 一個前端包管理工具。能夠幫我們管理Web站點上的各種框架,類庫等等。主要作用有如下:能夠幫助我們跟蹤前端包,并且保證他們是最新(或者是你指定的特定版本),Bower能夠管理前端里面的HTML,C...
摘要:基礎(chǔ)篇整合最近有朋友也想學(xué)習(xí)相關(guān)方面的知識,如果你是后端想接近前端,作為一門跑在服務(wù)端的語言從這里入門再好不過了。事件驅(qū)動機(jī)制是通過內(nèi)部單線程高效率地維護(hù)事件循環(huán)隊列來實現(xiàn)的,沒有多線程的資源占用和上下文的切換。 nodeJs 基礎(chǔ)篇整合 最近有朋友也想學(xué)習(xí)nodeJs相關(guān)方面的知識,如果你是后端想接近前端,node作為一門跑在服務(wù)端的JS語言從這里入門再好不過了。如果你正好喜歡前端,...
閱讀 3308·2021-09-30 09:54
閱讀 3804·2021-09-22 15:01
閱讀 3110·2021-08-27 16:19
閱讀 2578·2019-08-29 18:39
閱讀 2164·2019-08-29 14:09
閱讀 634·2019-08-26 10:23
閱讀 1343·2019-08-23 12:01
閱讀 1873·2019-08-22 13:57