一、創建 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