成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Npm優化的工程化相關問題

開發 前端
package-lock.json文件作用就是鎖定依賴安裝結構,目的就是保證在任意機器和環境上執行npm install都會得到完全相同的node_modules安裝結果。

[[436070]]

package-lock.json緩存了每個包的具體版本和下載鏈接,這樣就不需要再去遠程倉庫進行查詢,節約了安裝時間,提升了部署效率。package-lock.json文件作用就是鎖定依賴安裝結構,目的就是保證在任意機器和環境上執行npm install都會得到完全相同的node_modules安裝結果。

我們知道單一的package.json不能確定唯一的依賴樹,這是因為:

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

并不是所有的子依賴都有dependencies屬性,只有子依賴的依賴和當前已安裝在根目錄的node_modules中的依賴沖突后,才會有這個屬性。

至于要不要將lockfiles文件提交到代碼倉庫中,要看項目定位進行決定。

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

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

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

在npm v5.x版本中,npm install時都會根據package-lock.json文件下載,不管package.json內容究竟是什么

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

npm 5.4.2版本后

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

npm設計的依賴類型聲明有以下幾種:

  • dependencies項目依賴----------------------------全部被下載,會部署在生成環境中
  • devDependencies開發依賴-------------------------不會被自動下載,只在開發環境中使用
  • peerDependencies同版本依賴-----------------------
  • bundledDependencies捆綁依賴----------------------
  • optionalDependencies可選依賴----------------------

并不是只有在dependencies中的模塊才會被一起打包,也不是devDependencies中的依賴一定不會被打包,這取決于項目開發過程代碼是否進行了相關的依賴引用。其實dependencies、devDependencies更多是個規范作用。

注意:在bundledDependencies中指定的依賴包必須在dependencies、devDependencies中聲明過,否則在npm pack階段會進行報錯

peerDependencies主要用于:

  • 插件不能單獨運行
  • 插件正確運行的前提是核心依賴庫必須先下載安裝
  • 不希望核心依賴庫被重復安裝
  • 插件API的設計必須要符合核心依賴庫的插件編寫規范
  • 在項目中同一插進體系下,核心依賴庫版本最好相同

最后,可以得到開發建議:

優先使用npm v5.4.2以上的npm版本,以保證npm的最基本先進性和穩定性

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

其它項目成員首次checkout/clone項目代碼后,執行一次npm install安裝依賴包

對于升級依賴包的需求:

  • 依靠npm update命令升級到新的小版本
  • 依靠npm install@升級大版本
  • 也可以手動修改package.json中的版本號,并執行npm install來升級版本
  • 本地驗證升級后新版本無問題,提交新的package.json、package-lock.json文件

對于降級依賴包的需求:執行npm install@命令,驗證沒有問題后,提交新的package.json、package-lock.json文件

刪除某些依賴:

  • 執行npm uninstall,驗證沒有問題后,提交新的package.json、package-lock.json文件
  • 手動操作package.json刪除依賴,執行npm install驗證沒有問題后,提交新的package.json、package-lock.json文件

任何團隊提交package.json、package-lock.json文件,其他成員需要拉取更新代碼,執行npm isntall更新依賴

任何時候都不要修改package-lock.json

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

參考:《前端基礎建設和架構設計30講》

 

責任編輯:姜華 來源: 前端萬有引力
相關推薦

2015-10-26 10:32:01

前端優化工程化

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

軟件開發 技術

2018-05-18 10:08:15

人工智能移動平臺大數據

2023-02-15 18:12:43

開發企業級CLI

2021-03-19 07:23:23

Go架構Go工程化

2018-06-15 10:12:04

滴滴前端分支管理

2021-12-09 11:30:46

CSS技術前端

2024-05-27 13:46:16

2022-07-06 11:20:16

前端開發

2024-07-02 10:48:04

語言項目配置

2021-11-16 08:13:30

CSS 技巧工程化技術
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品极品视频在线观看免费 | 国产大学生情侣呻吟视频 | 福利影院在线看 | 久久亚洲综合 | 久久777| www成人啪啪18| 操操日| 干干天天 | 日韩免费中文字幕 | 精品久久精品 | 精品一区二区三区电影 | 日韩av一区二区在线观看 | 欧美久久一级 | 欧美福利一区 | 亚洲精品乱码久久久久久按摩观 | 久久综合狠狠综合久久综合88 | 激情91| 久久av资源网 | 成人免费淫片aa视频免费 | 色婷婷精品久久二区二区蜜臂av | 亚洲午夜精品在线观看 | 亚洲精品一 | 超碰人人插 | 网站黄色在线免费观看 | 精品一区二区三区中文字幕 | 国产亚洲一区二区三区 | 午夜国产一区 | 久久高清免费视频 | 一二三区视频 | 久久99精品久久久久蜜桃tv | www.亚洲区 | 免费精品久久久久久中文字幕 | 亚洲国产精品99久久久久久久久 | 精品久久久久久久久久久久 | 亚洲午夜av久久乱码 | 欧美一区二区大片 | 日韩欧美一二三区 | 成人在线中文字幕 | 日本久久久影视 | 国产成人精品午夜视频免费 | 久久久www成人免费精品 |