成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

nodejs包依賴(lài)管理

chenatu / 491人閱讀

摘要:鮮花總需要綠葉襯托的,對(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)。

深入可以閱讀文檔:http://www.alloyteam.com/2016...

注意版本號(hào)的控制方式

打開(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)管理版本

感興趣的同學(xué)可以閱讀以下文檔:
論版本號(hào)的正確打開(kāi)方式:http://taobaofed.org/blog/201...

注意從npm2升級(jí)到npm3需要?jiǎng)h除舊的node_modules文件夾

盡管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

相關(guān)文章

  • NodeJS 工程師必備的 8 個(gè)工具

    摘要:典型的使用場(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è)人的...

    liangzai_cool 評(píng)論0 收藏0
  • 寫(xiě)給前端的Python依賴(lài)管理指北

    摘要:概述在的項(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...

    zgbgx 評(píng)論0 收藏0
  • Bower的安裝與基本使用

    摘要:安裝依賴(lài)于和,如果要使用它需要先安裝和,因?yàn)榘?,所以只需要安裝即可。安裝配置文件作用類(lèi)似于,執(zhí)行時(shí)會(huì)依據(jù)這個(gè)配置文件更新庫(kù)配置文件必須,如果需要注冊(cè)包,則該包名唯一。 Bower是什么東西? 一個(gè)前端包管理工具。能夠幫我們管理Web站點(diǎn)上的各種框架,類(lèi)庫(kù)等等。主要作用有如下:能夠幫助我們跟蹤前端包,并且保證他們是最新(或者是你指定的特定版本),Bower能夠管理前端里面的HTML,C...

    livem 評(píng)論0 收藏0
  • Bower的安裝與基本使用

    摘要:安裝依賴(lài)于和,如果要使用它需要先安裝和,因?yàn)榘?,所以只需要安裝即可。安裝配置文件作用類(lèi)似于,執(zhí)行時(shí)會(huì)依據(jù)這個(gè)配置文件更新庫(kù)配置文件必須,如果需要注冊(cè)包,則該包名唯一。 Bower是什么東西? 一個(gè)前端包管理工具。能夠幫我們管理Web站點(diǎn)上的各種框架,類(lèi)庫(kù)等等。主要作用有如下:能夠幫助我們跟蹤前端包,并且保證他們是最新(或者是你指定的特定版本),Bower能夠管理前端里面的HTML,C...

    PrototypeZ 評(píng)論0 收藏0
  • nodejs 基礎(chǔ)篇整合

    摘要:基礎(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ò)了。如果你正好喜歡前端,...

    lemanli 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<