package.json 與 package.lock.json

前言

package.jsonpackage.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.31.2.9可以,而1.3.1不可以。
  • ^:可以更新次版本,補(bǔ)丁版本。 如^1.2.3,1.3.1 1.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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容