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