package.json詳解以及package-lock.json的作用


一、創建 package.json
輸入如下命令之后,會要求填寫基本的配置信息,這里,我們選擇一路回車即可,待生成 package.json 文件之后,再來配置。

npm init

 

二、配置 package.json

{
  // 包的名稱
  "name": "sg-utils",
  // 包的版本號
  "version": "1.4.6", 
  // 包的描述
  "description": "javascript通用工具類", 
  // 包的入口文件
  "main": "index.js", 
  // 上傳npm的白名單,即被允許上傳的文件
  "files": [ 
    "src",
    "demo",
    "index.js"
  ],
  // 指定了運行腳本命令的npm命令行縮寫
  "scripts": {
    "start": "node server.js"
  },
  // 遠程代碼倉庫
  "repository": {
    "type": "git",
    "url": "https://github.com/shiguang0116/sg-utils"
  },
  // 關鍵字
  "keywords": [
    "javascript",
    "util"
  ],
  // 作者
  "author": "guang.shi",
  // 許可證數組
  "license": "ISC",
  // 提交bug的地址
  "bugs": {
    "url": "https://github.com/shiguang0116/sg-utils/issues"
  },
  // 包的主頁
  "homepage": "https://github.com/shiguang0116/sg-utils#readme",
  // 運行引擎,指明node.js運行所需要的版本
  "engines": {
    "node": ">= 6.0.0",
    "npm": ">= 3.0.0"
  },
  // 開發環境的依賴包列表
  "devDependencies": {
    "eslint": "^5.16.0",
    "eslint-config-vui": "^0.2.7",
    "eslint-plugin-html": "^5.0.5"
  },
  // 生產環境的依賴包列表
  "dependencies": {},
  // 依賴包列表
  "peerDependencies": {}
}

 


.

三、devDependencies、dependencies、peerDependencies的區別
1、devDependencies和dependencies

  • devDependencies是只會在開發環境下依賴的模塊,生產環境不會被打入包內。安裝時,加上--save-dev
  • dependencies依賴的包不僅開發環境能使用,生產環境也能使用。安裝時,加上--save

2、peerDependencies的作用

  • peerDependencies是用來發布npm插件時指定所需要兼容的宿主包的版本。比如以下場景:
  • 我們開發webpack-plugin-a@1.0.0的時候是針對webpack@2.0.0來開發的;
  • webpack發布了最新的webpack@3.0.0並且做了不兼容升級,導致webpack-plugin-a@1.0.0已經不能在該版本使用;
  • 有不明真相的開發者,安裝了webpack@3.0.0和我們的webpack-plugin-a@1.0.0;
  • 由於webpack版本不兼容,當該開發者執行編譯的時候肯定是要報錯的。那么如何避免這種問題的發生呢?這就需要在webpack-plugin-a@1.0.0的package.json中添加如下配置:
"peerDependencies": {
    "webpack": "^2.0.0"
}

 

 

  • 這樣就指定了webpack-plugin-a@1.0.0只兼容webpack@2.x.x,當用戶同時安裝webpack@3.0.0和webpack-plugin-a@1.0.0的時候就會拋出:
    UNMET PEER DEPENDENCY webpack@3.0.0
    npm WARN webpack-plugin-a@1.0.0 requires a peer of webpack@^2.0.0 but none was installed

     


以上提示,足夠讓開發者認識到當前所存在的風險了,該特性添加於Node.js 0.8.19(npm 1.2.10)版本。
.

四、版本符號說明

  • 如果對“語義化版本號變更”不了解的,可以參考文章:https://blog.csdn.net/guang_s/article/details/84991304
  • ^ 是npm默認的版本符號。 例如:npm install --save sg-utils 會在 package.json 中添加 “sg-utils”: “^1.4.6”。這個符號會告訴npm可以安裝 1.4.6 或者一個大於它的版本, 但是要是主版本 1 以下的版本;
  • ~ 符號表示可以安裝 1.4.6 或者一個大於它的版本, 但是要是次版本號 1.3以下的版本;
  • > 符號用來指定可以安裝的 beta 版本;
  • 可以通過 npm config set save-prefix='' 來設置默認符號。

.

五、package-lock.json的作用
npm更新到v5.x.x以后,會出現一種新的自動生成文件 package-lock.json,如果打開這個文件,會發現它看着像 package.json 里面的依賴。那么,它究竟是做什么用的呢?

1、背景介紹

  • 比如我們的項目用了 sg-utils ,npm install sg-utils --save-dev,我們本地使用的版本是 ^1.4.6,這時 package.json 記錄的版本號也是 ^1.4.6;
  • 當有人從 github 上拉取我們的代碼,然后初始化項目(或者我們自己有一天也可能再次安裝依賴)npm install。這個時候,項目安裝的 sg-utils 就是 在主版本 1 以下的最新版本 (比如更新到了 1.4.7,兩個版本之前修改了一個bug),那么本地安裝的就是 1.4.7;
  • 那么,就會存在多人開發項目,但是本地的依賴版本不一樣的情況。雖然只是修改了一個 bug,但仍然有可能影響代碼的開發。

2、package-lock.json 版本鎖定

  • 當我們安裝依賴時,package-lock.json 文件會自動生成。里面會描述上一次更改后的確切的依賴管理樹,包含了唯一的版本號和相關的包信息。之后的 npm install 會根據 package-lock.json 文件進行安裝,保證不同環境、不同時間下的依賴是一樣的;
  • 由於 package-lock.json 文件中記錄了下載源地址,可以加快我們的 npm install 速度。

————————————————
版權聲明:本文為CSDN博主「猿始森林」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/guang_s/article/details/90376830


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM