一、創建 package.json
輸入如下命令之後,會要求填寫基本的配置信息,這裏,我們選擇一路回車即可,待生成 package.json 文件之後,再來配置。
npm init
二、配置 package.json
當然,.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插件時指定所需要兼容的宿主包的版本。比如以下場景:
- 我們開發[email protected]的時候是針對[email protected]來開發的;
- webpack發佈了最新的[email protected]並且做了不兼容升級,導致[email protected]已經不能在該版本使用;
- 有不明真相的開發者,安裝了[email protected]和我們的[email protected];
- 由於webpack版本不兼容,當該開發者執行編譯的時候肯定是要報錯的。那麼如何避免這種問題的發生呢?這就需要在[email protected]的package.json中添加如下配置:
"peerDependencies": {
"webpack": "^2.0.0"
}
- 這樣就指定了[email protected]只兼容[email protected],當用戶同時安裝[email protected]和[email protected]的時候就會拋出:
UNMET PEER DEPENDENCY [email protected]
npm WARN [email protected] 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 速度。
.
系列文章
【node使用】發佈一個自己的npm包
【node使用】搭建一個web服務器
【node使用】package.json詳解以及package-lock.json的作用
【node使用】path模塊
【node使用】glob匹配模式
【node使用】fs模塊
【node使用】實現console輸出不同顏色