探索 package.json

通常存在於專案根目錄中的 package.json 檔案包含有關你的應用程式或模組的後設資料,以及執行 npm install 時從 npm 安裝的依賴項列表。

在命令提示符中初始化 package.json 型別 npm init

要使用預設值建立 package.json,請使用:

npm init --yes
# or
npm init -y

要安裝包並將其儲存到 package.json,請使用:

npm install {package name} --save

你還可以使用簡寫表示法:

 npm i -S {package name}

NPM 別名 -S--save-D--save-dev,分別儲存在你的生產或開發依賴項中。

該包將出現在你的依賴項中; 如果你使用 --save-dev 而不是 --save,那麼包將出現在你的 devDependencies 中。

package.json 的重要特性:

{
  "name": "module-name",
  "version": "10.3.1",
  "description": "An example module to illustrate the usage of a package.json",
  "author": "Your Name <your.name@example.org>",
  "contributors": [{
    "name": "Foo Bar",
    "email": "foo.bar@example.com"
  }],
  "bin": {
    "module-name": "./bin/module-name"
  },
  "scripts": {
    "test": "vows --spec --isolate",
    "start": "node index.js",
    "predeploy": "echo About to deploy",
    "postdeploy": "echo Deployed",
    "prepublish": "coffee --bare --compile --output lib/foo src/foo/*.coffee"
  },
  "main": "lib/foo.js",
  "repository": {
    "type": "git",
    "url": "https://github.com/username/repo"
  },
  "bugs": {
    "url": "https://github.com/username/issues"
  },
  "keywords": [
    "example"
  ],
  "dependencies": {
    "express": "4.2.x"
  },
  "devDependencies": {
    "assume": "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0"
  },
  "peerDependencies": {
    "moment": ">2.0.0"
  },
  "preferGlobal": true,
  "private": true,
  "publishConfig": {
    "registry": "https://your-private-hosted-npm.registry.domain.com"
  },
  "subdomain": "foobar",
  "analyze": true,
  "license": "MIT",
  "files": [
    "lib/foo.js"
  ]
}

有關一些重要屬性的資訊:

name

包的唯一名稱,應以小寫字母顯示。此屬性是必需的,如果沒有它,你的包將無法安裝。

  1. 名稱必須小於或等於 214 個字元。
  2. 名稱不能以點或下劃線開頭。
  3. 新包的名稱中不得包含大寫字母。
version

軟體包的版本由 Semantic Versioning (semver) 指定。假設版本號被寫為 MAJOR.MINOR.PATCH 並且你遞增:

  1. 進行不相容的 API 更改時的 MAJOR 版本
  2. 以向後相容的方式新增功能時的 MINOR 版本
  3. 當你進行向後相容的錯誤修復時,PATCH 版本
description

專案的描述。儘量保持簡潔明瞭。

author

這個包的作者。

bin

用於從包中公開二進位制指令碼的物件。該物件假定鍵是二進位制指令碼的名稱,值是指令碼的相對路徑。

包含 CLI(命令列介面)的包使用此屬性。

script

公開其他 npm 命令的物件。該物件假定鍵是 npm 命令,值是指令碼路徑。執行 npm run {command name}npm run-script {command name} 時可以執行這些指令碼。

可以在沒有相對路徑的情況下呼叫包含命令列介面並在本地安裝的程式包。所以不要叫 ./node-modules/.bin/mocha,你可以直接呼叫 mocha

main

包的主要入口點。在節點中呼叫 require('{module name}') 時,這將是所需的實際檔案。

強烈建議要求主檔案不會產生任何副作用。例如,要求主檔案不應啟動 HTTP 伺服器或連線到資料庫。相反,你應該在主指令碼中建立像 exports.init = function () {...} 這樣的東西。

keywords

一組描述你的包的關鍵字。這些將幫助人們找到你的包裹。

devDependencies

這些依賴項僅用於開發和測試模組。除非已設定 NODE_ENV=production 環境變數,否則將自動安裝依賴項。如果是這種情況,你仍然可以使用 npm install --dev 這些包

peerDependencies

如果你使用此模組,則 peerDependencies 會列出你必須與此模組一起安裝的模組。例如,moment-timezone 必須與 moment 一起安裝,因為它是一個外掛,即使它不直接 require("moment")

preferGlobal

一個屬性,指示此頁面更喜歡使用 npm install -g {module-name} 全域性安裝。包含 CLI(命令列介面)的包使用此屬性。

在所有其他情況下,你不應使用此屬性。

publishConfig

publishConfig 是一個物件,其配置值將用於釋出模組。設定的配置值將覆蓋預設的 npm 配置。

publishConfig 最常見的用途是將你的包釋出到私人 npm 登錄檔,這樣你仍然可以獲得 npm 的好處,但是對於私有包。這可以通過簡單地將私有 npm 的 URL 設定為登錄檔項的值來完成。

files

這是包含在已釋出包中的所有檔案的陣列。可以使用檔案路徑或資料夾路徑。將包括資料夾路徑的所有內容。這隻會包含要分發的正確檔案,從而減少了包的總大小。此欄位與 .npmignore 規則檔案一起使用。

資源