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