package.json 詳解

本文是對(duì) Node.js 項(xiàng)目中 package.json 文件的詳解。


目錄

  • package.json 簡介
  • 配置說明
    • 必需屬性
    • 可選屬性

package.json 簡介

package.json 是一個(gè)位于 Node.js 項(xiàng)目根目錄中的 JSON 文件,管理整個(gè)項(xiàng)目的依賴項(xiàng)和元數(shù)據(jù),是項(xiàng)目的核心。

NPM 或 YARN 這類包管理工具可以通過 package.json 來識(shí)別項(xiàng)目并了解如何處理項(xiàng)目的依賴關(guān)系。


配置說明

必需屬性
  • name
    項(xiàng)目名稱,全部小寫字母,不能超過 214 個(gè)字符且必須是 URL 安全的(允許使用下劃線和中橫線,但不允許使用空格或其它字符)。

  • version
    版本號(hào),格式 x.y.z,符合 NPM 語義版本控制要求

    • x:主版本號(hào),新增功能,不兼容之前版本
    • y:次版本號(hào),新增功能,但兼容之前版本
    • z:PATCH 補(bǔ)丁版本號(hào),修復(fù) BUG,且兼容之前版本
可選屬性
  • license
    軟件許可證,值通常是許可證的標(biāo)識(shí)符代碼,如 BSD、MIT。

  • author
    一個(gè)人,軟件作者,格式:

    • Name 格式字符串
    "author": "Jon Church jon@example.com https://www.osioslabs.com/#team"
    
    • 包含 name、emailurl 的 JSON,如:
    "author": {
        "name": "...",
        "email": "example@example.com",
        "url": "https://..."
    }
    
  • contributors
    一組人,數(shù)組類型,數(shù)組中每項(xiàng)和 author 格式一致。

  • private
    如果這個(gè)屬性被設(shè)置為 true,NPM 將拒絕發(fā)布它,這是為了防止一個(gè)私有模塊被無意間發(fā)布出去。如果只想讓模塊被發(fā)布到一個(gè)特定的 NPM 倉庫,如一個(gè)內(nèi)部的倉庫,可與在下面的 publishConfig 中配置倉庫參數(shù)。

  • publishConfig
    這個(gè)配置是會(huì)在模塊發(fā)布時(shí)用到的一些值的集合。如果不想模塊被默認(rèn)被標(biāo)記為最新的,或者默認(rèn)發(fā)布到公共倉庫,可以在這里配置 tag 或倉庫地址。

  • description
    字符串,用于 npm search 搜索。

  • keywords
    字符串?dāng)?shù)組,用于 npm search 搜索。

  • main
    指定加載的入口文件,使用 require('moduleName') 時(shí)便會(huì)加載此文件,默認(rèn)值為模塊根目錄下的 index.js。
    browser 環(huán)境和 node 環(huán)境均可使用。

  • browser
    定義了 NPM 包在 browser 環(huán)境下的入口文件。

  • scripts
    指定運(yùn)行腳本命令的 NPM 命令行縮寫,比如 serve 指定了運(yùn)行 npm run serve 時(shí)真正執(zhí)行的命令。

    以下設(shè)置指定了運(yùn)行 npm run serve、npm run lintnpm run mock 時(shí)要執(zhí)行的命令。

    "scripts": {
        "serve": "concurrently \"npm:mock\" \"vue-cli-service serve\"",
        "lint": "vue-cli-service lint",
        "mock": "cd mock && ts-node-dev mock-server.ts"
    }
    
  • config
    用于添加命令行環(huán)境變量,JSON 對(duì)象,值在 Scripts 的整個(gè)周期中皆可用,專門用于給 Scripts 提供配置參數(shù)。

  • bin
    指定各內(nèi)部命令對(duì)應(yīng)的可執(zhí)行文件的位置。如以下配置指定 someTool 命令對(duì)應(yīng)的可執(zhí)行文件為 bin 子目錄下的 someTool.js。

    "bin": {
        "someTool": "./bin/someTool.js"
    }
    

    NPM 會(huì)查找這個(gè)文件,在 node_modules/.bin/ 目錄下建立符號(hào)鏈接 node_modules/.bin/someTool,由于 node_modules/.bin/ 目錄在運(yùn)行時(shí)加入系統(tǒng)的 PATH 變量,因此運(yùn)行 NPM 時(shí)可以不帶路徑,直接通過命令運(yùn)行這些腳本。

    所有 node_modules/.bin/ 目錄下的命令都可以使用 npm run [命令] 執(zhí)行,在命令行下鍵入 npm run 后按 Tab 鍵就會(huì)顯示所有可使用的命令。

  • engines
    指定運(yùn)行的平臺(tái),如 Node.js 的某個(gè)版本、NPM 版本或?yàn)g覽器。

  • repository
    代碼存放位置,如:

    "repository": {
        "type": "git",
        "url": "https://github.com/..."
    }
    
  • dependencies
    指定項(xiàng)目運(yùn)行需要依賴的模塊,JSON 對(duì)象類型,每個(gè)對(duì)象成員分別由模塊名和對(duì)應(yīng)版本要求組成,表示依賴的模塊和其版本范圍。

    "dependencies": {
        "echarts": "4.2.1",
        "axios": "^0.19.0",
        "js-cookie": "~2.2.0",
        "sortablejs": "latest"
    }
    

    版本號(hào)限定分以下幾種:

    • 指定版本號(hào):如上例中的 echarts,只安裝指定版本。
    • ^ + 指定版本號(hào):如上例中的 axios,表示安裝同一主版本號(hào)下的最新版本,即只能安裝 0.x.x 版本,不能安裝 1.x.x 版本。
    • ~ + 指定版本號(hào):如上例中的 js-cookie,表示安裝同一主版本號(hào)和次版本號(hào)下的最新版本,即只能安裝 2.2.x 版本,不能安裝 2.3.x 版本。
    • latest:安裝最新版本。
  • devDependencies
    指定項(xiàng)目開發(fā)需要依賴的模塊,同 dependencies 一樣也是一個(gè)JSON 對(duì)象類型,每個(gè)對(duì)象成員分別由模塊名和對(duì)應(yīng)版本要求組成,表示依賴的模塊和其版本范圍。版本號(hào)限定規(guī)則和 dependencies 一致。

  • bugs
    問題跟蹤系統(tǒng)地址或郵箱,npm bugs 時(shí)使用,如:

    "bugs": "https://github.com/..."
    
  • gitHooks
    @vue/cli-service 安裝后會(huì)安裝 yorkie,允許在 package.jsongitHooks 字段中方便地指定 Git Hook。

  • lint-staged

最后編輯于
?著作權(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ù)。

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