偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Npm優(yōu)化的工程化相關(guān)問題

開發(fā) 前端
package-lock.json文件作用就是鎖定依賴安裝結(jié)構(gòu),目的就是保證在任意機(jī)器和環(huán)境上執(zhí)行npm install都會(huì)得到完全相同的node_modules安裝結(jié)果。

[[436070]]

package-lock.json緩存了每個(gè)包的具體版本和下載鏈接,這樣就不需要再去遠(yuǎn)程倉(cāng)庫進(jìn)行查詢,節(jié)約了安裝時(shí)間,提升了部署效率。package-lock.json文件作用就是鎖定依賴安裝結(jié)構(gòu),目的就是保證在任意機(jī)器和環(huán)境上執(zhí)行npm install都會(huì)得到完全相同的node_modules安裝結(jié)果。

我們知道單一的package.json不能確定唯一的依賴樹,這是因?yàn)椋?/p>

  • 不同版本的npm安裝依賴策略和算法不同
  • npm install將根據(jù)package.json中的semver-range version更新依賴,某些依賴項(xiàng)自上次安裝以來,可能已經(jīng)發(fā)布了新版本。

并不是所有的子依賴都有dependencies屬性,只有子依賴的依賴和當(dāng)前已安裝在根目錄的node_modules中的依賴沖突后,才會(huì)有這個(gè)屬性。

至于要不要將lockfiles文件提交到代碼倉(cāng)庫中,要看項(xiàng)目定位進(jìn)行決定。

  • 如果開發(fā)一個(gè)應(yīng)用,建議將package-lock.json文件提交到代碼版本倉(cāng)庫
  • 如果開發(fā)目標(biāo)是開發(fā)一個(gè)給外部使用的庫,可以復(fù)用主項(xiàng)目已經(jīng)加載過的包,減少依賴重復(fù)和體積
  • 如果開發(fā)的庫依賴精確的版本號(hào)的模塊,那么提交lockfiles到倉(cāng)庫可能會(huì)造成同一個(gè)依賴不同版本都被下載的情況
  • 如果作為庫開發(fā)者,真的有使用某個(gè)特定版本依賴的需要,一個(gè)更好的方式就是定義peerDependencies

因此,推薦做法是將packjson-lock.json一起提交到代碼庫中,不需要ignore。但是在執(zhí)行npm publish命令,發(fā)布一個(gè)庫的時(shí)候,應(yīng)該被忽略而不是直接發(fā)布出去。

早期npm鎖定版本的方式使用npm-shrinkwrap.json,與package-lock.json不同點(diǎn)在于:npm包發(fā)布的時(shí)候默認(rèn)將npm-shrinkwrap.json發(fā)布,因此類庫或組件需要慎重使用。使用package-lock.json是npm v5.x版本新增特性,而npm v5.6以上才逐步穩(wěn)定在5.0-5.6中間,對(duì)于package-lock.json的處理邏輯進(jìn)行了幾次更新。

在npm v5.x版本中,npm install時(shí)都會(huì)根據(jù)package-lock.json文件下載,不管package.json內(nèi)容究竟是什么

npm v5.1.0版本到npm v5.4.2,npm install會(huì)無視package-lock.json文件,下載最新的npm包并進(jìn)行更新package-lock.json文件

npm 5.4.2版本后

  • 如果項(xiàng)目只有package.json文件,npm install后生成一個(gè)package-lock.json文件;
  • 如果項(xiàng)目中存在package.json和package-lock.json文件,同時(shí)package.json文件的semver-range版本和package-lock.json中版本兼容,即使此時(shí)有新的適用版本,npm install還是會(huì)根據(jù)package-lock.json進(jìn)行更新
  • 如果項(xiàng)目存在package.json和package-lock.json文件,同時(shí)package.json文件的semver-range版本和package-lock.json中版本不兼容,npm install時(shí)package-lock.json會(huì)將更新到兼容package.json的版本
  • 如果package-lock.json和npm-shrinkwrap.json同時(shí)存在項(xiàng)目根目錄下,package-lock.json將會(huì)被忽略

npm設(shè)計(jì)的依賴類型聲明有以下幾種:

  • dependencies項(xiàng)目依賴----------------------------全部被下載,會(huì)部署在生成環(huán)境中
  • devDependencies開發(fā)依賴-------------------------不會(huì)被自動(dòng)下載,只在開發(fā)環(huán)境中使用
  • peerDependencies同版本依賴-----------------------
  • bundledDependencies捆綁依賴----------------------
  • optionalDependencies可選依賴----------------------

并不是只有在dependencies中的模塊才會(huì)被一起打包,也不是devDependencies中的依賴一定不會(huì)被打包,這取決于項(xiàng)目開發(fā)過程代碼是否進(jìn)行了相關(guān)的依賴引用。其實(shí)dependencies、devDependencies更多是個(gè)規(guī)范作用。

注意:在bundledDependencies中指定的依賴包必須在dependencies、devDependencies中聲明過,否則在npm pack階段會(huì)進(jìn)行報(bào)錯(cuò)

peerDependencies主要用于:

  • 插件不能單獨(dú)運(yùn)行
  • 插件正確運(yùn)行的前提是核心依賴庫必須先下載安裝
  • 不希望核心依賴庫被重復(fù)安裝
  • 插件API的設(shè)計(jì)必須要符合核心依賴庫的插件編寫規(guī)范
  • 在項(xiàng)目中同一插進(jìn)體系下,核心依賴庫版本最好相同

最后,可以得到開發(fā)建議:

優(yōu)先使用npm v5.4.2以上的npm版本,以保證npm的最基本先進(jìn)性和穩(wěn)定性

項(xiàng)目的第一次搭建使用npm install安裝依賴包,并提交package.json、package-lock.json文件,而不提交node_moduels目錄

其它項(xiàng)目成員首次checkout/clone項(xiàng)目代碼后,執(zhí)行一次npm install安裝依賴包

對(duì)于升級(jí)依賴包的需求:

  • 依靠npm update命令升級(jí)到新的小版本
  • 依靠npm install@升級(jí)大版本
  • 也可以手動(dòng)修改package.json中的版本號(hào),并執(zhí)行npm install來升級(jí)版本
  • 本地驗(yàn)證升級(jí)后新版本無問題,提交新的package.json、package-lock.json文件

對(duì)于降級(jí)依賴包的需求:執(zhí)行npm install@命令,驗(yàn)證沒有問題后,提交新的package.json、package-lock.json文件

刪除某些依賴:

  • 執(zhí)行npm uninstall,驗(yàn)證沒有問題后,提交新的package.json、package-lock.json文件
  • 手動(dòng)操作package.json刪除依賴,執(zhí)行npm install驗(yàn)證沒有問題后,提交新的package.json、package-lock.json文件

任何團(tuán)隊(duì)提交package.json、package-lock.json文件,其他成員需要拉取更新代碼,執(zhí)行npm isntall更新依賴

任何時(shí)候都不要修改package-lock.json

如果package-lock.json出現(xiàn)沖突或問題,建議將本地package-lock.json文件刪除,拉取遠(yuǎn)程的package-lock.json文件和package.json,再執(zhí)行npm install命令

參考:《前端基礎(chǔ)建設(shè)和架構(gòu)設(shè)計(jì)30講》

 

責(zé)任編輯:姜華 來源: 前端萬有引力
相關(guān)推薦

2015-10-26 10:32:01

前端優(yōu)化工程化

2024-06-28 11:22:09

2023-09-15 10:33:45

前端工程化commit

2022-12-01 07:46:01

工程化工具

2021-05-18 19:18:50

前端工程化工程

2022-08-20 18:28:49

汽車軟件

2022-07-26 17:19:11

前端前端工程化

2022-10-09 14:50:24

前端pnpm工具

2022-08-17 11:33:35

前端配置

2021-06-05 18:01:05

工具Rollup前端

2021-07-06 10:03:05

軟件開發(fā) 技術(shù)

2018-05-18 10:08:15

人工智能移動(dòng)平臺(tái)大數(shù)據(jù)

2023-02-15 18:12:43

開發(fā)企業(yè)級(jí)CLI

2018-06-15 10:12:04

滴滴前端分支管理

2021-03-19 07:23:23

Go架構(gòu)Go工程化

2024-07-02 10:48:04

語言項(xiàng)目配置

2022-07-06 11:20:16

前端開發(fā)

2021-12-09 11:30:46

CSS技術(shù)前端

2024-05-27 13:46:16

2021-11-16 08:13:30

CSS 技巧工程化技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)