前言
package.json與package.lock.json在項(xiàng)目開發(fā)的時(shí)候經(jīng)常接觸到,這里做一個(gè)整理。
一、package.json
package.json文件通常位于項(xiàng)目的根目錄,包含了項(xiàng)目的各種數(shù)據(jù):項(xiàng)目的描述信息,項(xiàng)目的相關(guān)依賴。
1 創(chuàng)建文件
package.json可以手動(dòng)創(chuàng)建,也可以自動(dòng)生成。
在node環(huán)境下輸入以下命令,就會(huì)自動(dòng)生成package.json文件。
npm init
2 json數(shù)據(jù)
{
"name": "banana", // 項(xiàng)目名稱
"version":"0.0.1", // 版本信息
"description": "描述", // 描述信息
"keywords":["node.js","BANANA", "theme"], // 字符串?dāng)?shù)組 助于人們?cè)趎pm庫中搜索的時(shí)候發(fā)現(xiàn)你的模塊
"homepage": "https://banana.com", // 項(xiàng)目的主頁地址
"bugs":{"url":"http://banana/","email":"banana@xxxx.com"}, // 項(xiàng)目問題的反饋issue地址或者一個(gè)郵箱
"license": "ISC", // 項(xiàng)目的協(xié)議
"author": "banana", // 項(xiàng)目作者
"contributors":[{"name":"banana","email":"banana@xxxx.com"}], // 項(xiàng)目作者
"main": "index.js", // 加載入口文件
"bin": { // 指定每個(gè)內(nèi)部命令對(duì)應(yīng)的可執(zhí)行文件的位置。
"webpack": "bin/index.js",
},
"man": ["./doc/xxxx"], // 指定當(dāng)前模塊的man文檔的位置。
"directories": "", // 描述模塊的結(jié)構(gòu)
"repository": { // 指定一個(gè)代碼存放地址,對(duì)想要為你的項(xiàng)目貢獻(xiàn)代碼的人有幫助
"type": "git",
"url": "https://banana/"
},
"scripts": { // 指定了運(yùn)行腳本命令的npm命令行縮寫
"start": "webpack serve --config webpack.config.dev.js --progress"
},
"config": { "port" : "8080" }, // 添加命令行的環(huán)境變量。
"dependencies": {}, // 項(xiàng)目生產(chǎn)環(huán)境所依賴的模塊
"devDependencies": { // 項(xiàng)目開發(fā)環(huán)境所需要的模塊
"webpack": "^5.38.1",
},
"engines": {"node": "0.10.x"}, // 運(yùn)行的環(huán)境信息
"os" : [ "win32", "darwin", "linux" ], // 限制只能在哪個(gè)操作系統(tǒng)上運(yùn)行
"cpu" : [ "x64", "ia32" ], // 限制模塊只能在某種架構(gòu)的cpu下運(yùn)行
"private": false, // 屬性被設(shè)置為true,npm將拒絕發(fā)布它,這是為了防止一個(gè)私有模塊被無意間發(fā)布出去。
"publishConfig": { // 配合private來使用,如果只想讓模塊被發(fā)布到一個(gè)特定的npm倉庫,如一個(gè)內(nèi)部的倉庫。
"tag": "1.0.0",
"registry": "https://registry.npmjs.org/",
"access": "public"
}
}
4 scripts字段
scripts字段指定了node環(huán)境的運(yùn)行腳本的npm命令行縮寫。
如package.json有以下配置,可以在node命令行輸入npm run start
"scripts": {
"start": "webpack serve --config webpack.config.dev.js --progress"
},
5 dependencies與devDependencies字段
5.1 描述
-
dependencies項(xiàng)目生產(chǎn)環(huán)境所依賴的模塊 -
devDependencies項(xiàng)目開發(fā)環(huán)境所依賴的模塊
5.2 npm install
不同的安裝命令,會(huì)把依賴寫入不同的字段里面,下面列了下清單
5.2.1 dependencies
npm install // 不加參數(shù)時(shí),默認(rèn)會(huì)把依賴寫入dependencies字段
npm install --s
npm install -S
5.2.2 devDependencies
npm install --save-dev
npm install -D
6 版本號(hào)規(guī)則
當(dāng)輸入腳本npm install xxx@x.y.z的時(shí)候會(huì)去倉庫下載指定依賴。
所有版本號(hào)格式為x.y.z: 主版本.次版本.補(bǔ)丁版本
"devDependencies": {
"webpack": "^5.38.1",
},
前綴符號(hào)
-
~:只更新補(bǔ)丁版本。 如~1.2.3,1.2.9可以,而1.3.1不可以。 -
^:可以更新次版本,補(bǔ)丁版本。 如^1.2.3,1.3.11.5.9可以。 -
*:可以更新全部版本。如*1.2.3,2.2.3可以。 -
>:大于指定版本。 -
>=:大于或等于指定版本。 -
<:小于指定版本。 -
<=:小于或等于指定版本。 -
無符號(hào):特定版本。 -
latest:最新版本。
二、package.lock.json
1 官方描述:
package-lock.json它會(huì)在npm更改node_modules目錄樹或者package.json時(shí)自動(dòng)生成的,它準(zhǔn)確的描述了當(dāng)前項(xiàng)目npm包的依賴樹,并且在隨后的安裝中會(huì)根據(jù)package-lock.json來安裝,保證是相同的一個(gè)依賴樹,不考慮這個(gè)過程中是否有某個(gè)依賴有小版本的更新。
{
"name": "project-name",
"version": "0.1.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@ant-design-vue/babel-helper-vue-transform-on": {
"version": "1.0.1",
"resolved": "https://registry.npm.taobao.org/@ant-design-vue/babel-helper-vue-transform-on/download/@ant-design-vue/babel-helper-vue-transform-on-1.0.1.tgz",
"integrity": "sha1-0hnZL04fxeet0hHDR8f6AAUYtiM=",
"dev": true
},
}
}
2 與package.json區(qū)別
package.json 描述了依賴的部分信息,
package.lock.json 描述了依賴的詳細(xì)信息,包括所有依賴的具體版本號(hào),安裝地址,sha-1加密后的值,安裝在哪個(gè)環(huán)境,依賴內(nèi)部所需要的依賴項(xiàng)。
當(dāng)執(zhí)行npm install命令的時(shí)候,如果項(xiàng)目中有package-lock.json,那么就會(huì)從中解析所需安裝的依賴,而不是通過package.json。
3 注意
cnpm不支持package.lock.json