package.json 可以通過 npm init
來交互式地創建。
package.json 中可寫的內容非常多,以下講解字段的內容。
name 字段 和 version 字段
name 和 version 字段是 package.json 文件中最重要的字段。這是必須的字段,如果你的 npm 包沒有指定這兩個字段,將無法被安裝。name 和 version 字段被假定組合成一個唯一的標識符。包內容的更改和包版本的更改是同步的。
因此,一般我們認為一個最簡單的 package.json 文件如下所示:
{
"name" : "xxx",
"version" : "0.0.1",
}
另外,對于 name 字段的命名有如下規則限制:
- name 的長度必須小于等于214個字符。
- name 不能以"."(點)或者"_"(下劃線)開頭。
- name 中不能包含大寫字母。
- name 最終將被用作URL的一部分、命令行的參數和文件夾名。因此,name 不能含有非URL安全的字符。
scripts 字段
scripts 指定了運行腳本命令的 npm 命令行縮寫,比如 start 指定了運行 npm run start
時,所要執行的命令。
下面的設置指定了 npm run dev、npm run dist、npm run pub、npm run start、npm run test
時,所要執行的命令。
"scripts": {
"dev": "anyproxy --port 8080 --rule proxy.js & npm run start",
"dist": "cross-env NODE_ENV=production node ./tools/script.js",
"pub": "npm run dist",
"start": "cross-env NODE_ENV=development node ./tools/script.js",
"test": "node ./test.js",
}
我們從上面也可以看出,我們可以在一個字段命令中運行另外一個字段。
bin 字段
bin 字段用來指定各個內部命令對應的可執行文件的位置,一般而言,對于需要全局安裝的包,我們都有該字段:
"bin": {
"myCommand": "./bin/index.js"
}
上面的代碼中指定,myCommand
命令對應的可執行文件在同級別目錄下的 bin/index.js
中,因此 npm 在安裝該包的時候就會在 node_modules/.bin
的目錄下建立符號鏈接,對于全局安裝的包,由于 node_modules/.bin
會在運行時加入系統的 PATH 變量,因此可以直接通過命令來調用腳本。
另外,如果我們是在項目內安裝包,也可以通過 npx myCommand
的方式來進行調用。
main 字段
main 字段指定了加載的入口文件,require('moduleName')
就會加載這個文件。
對于 Node 來說,這個字段的默認值是模塊根目錄下面的 index.js。
config 字段
config 字段可以添加命令行的環境變量,例如下面的 package.json 文件:
{
"name" : "buluo",
"config" : { "port" : "8080" },
"scripts" : { "start" : "node index.js" }
}
在 index.js 中,我們可以直接使用該環境變量:
http
.createServer(...)
.listen(process.env.npm_package_config_port)
一些其他的描述性字段
接下來我們介紹一些描述性字段,這些描述性字段一般會在 npm 包的檢索、管理等中起到一定作用。
keywords :npm 包的關鍵字,keywords 是一個字符串的數組。它可以幫助人們在使用 npm search
時找到這個包。
homepage :項目主頁的 url。
bugs :改項目的 issue 跟蹤頁面或這報告 issue 的 email 地址。這對使用這個包遇到問題的用戶會有幫助,例如:
{
"url" : "https://github.com/owner/project/issues",
"email" : "project@hostname.com"
}
license :指定該 npm 包所使用的協議。
author:包作者名字,一般使用數組或者字符串,格式如下:
{
"name": "Barney Rubble",
"email": "b@rubble.com",
"url": "http://barnyrubble.tumblr.com/"
}
或者
"Barney Rubble <b@rubble.com> (http://barnyrubble.tumblr.com/)"
contributors: 貢獻者列表,是一個數組,每一個單位的格式和 anthor 相同。
repository:指明你的代碼被托管在何處,這對那些想要參與到這個項目中的人來說很有幫助。如果 git 倉庫在 github 上,用 npm docs
命令將會找到你,例如:
{
"type": "git",
"url": "https://github.com/npm/npm.git"
}
以上便是對一部分 pacakge.json 的字段的介紹,實際上,package.json 的字段不止這些,但是一般而言,了解以上字段已經足夠我們日常的學習和使用了。
更多字段可以參考官方文檔