前言
- package.json是每個npm包、基于node的項目中必不可少的配置文件,這里將詳細介紹出現(xiàn)在package.json中的各個參數(shù)。參考自官方文檔
name
- npm包的名稱,在你打算發(fā)布一個npm包時,
name字段和version字段是必不可少的,并且必須是唯一的。而如果你并不是打算發(fā)布npm包的話,name和version字段都是可缺省的。name的命名規(guī)范如下:
- 長度必須小于等于214個字符
- 不能以"."或"_"開頭
- 不能用大寫字母
- 這個
name字段最后會用作為URL的一部分、文件夾名稱、以及命令行的參數(shù)。因此,不能包含對URL不安全的字符。
version
- 和
name一樣,當你打算發(fā)布npm包時,version和name會作為包的唯一標識符。不打算發(fā)布npm包,則可以缺省。
-
version必須經(jīng)過node-semver解析,這是一個npm官方發(fā)布的一個關于version描述規(guī)范的npm包。
description
- 一個string字段描述你的npm包,幫助其他人在
npm search的時候發(fā)現(xiàn)你的npm包。
keywords
- 一個字符串組成的數(shù)組字段,幫助其他人在
npm search的時候發(fā)現(xiàn)你的npm包
homepage
- 一個表示項目首頁的url,一般是GitHub項目地址下的readme.md
bugs
- 一個表示接收問題反饋的url地址,也可以是email地址。一般是Github項目下的issues。
license
- 用于聲明你的npm包使用的license,以便使用者知道該如何使用你的包,以及哪些限制的地方。
author
contributors
files
- 可缺省。用于描述當你的npm包被依賴時,一組用來描述包含的文件條目的文件模式(file pattern),描述語法與
.gitignore的相似。
main
- main字段,用于描述你的npm包項目的主要入口文件。
- 比如你的包名稱為
foo,別人安裝了你的包并用require('foo')引入包時,其實就是引入的main字段里描述的文件。
- 對于很多npm包來說,
main字段是必須的,其他都無所謂了。
browser
- 如果你的包打算是用在客戶端的瀏覽器環(huán)境中,那么就應該用
browser字段來代替main字段。這樣來提示用戶,包里面的代碼可能會依賴一些node環(huán)境中不存在的內(nèi)容(比如window對象)。
bin
- 許多npm包中有一些想要安裝到PATH里的可執(zhí)行文件。在
bin字段,可以定義一組由命令行命令與可執(zhí)行文件目錄為鍵值對組成的對象。
- 在你安裝這個npm包時,全局安裝的情況,
bin字段就可以全局調(diào)用(會被安裝到prefix/bin),本地安裝的話,則會把bin字段里定義的命令添加到當前項目的./node_modules/.bin/里。然后就可以在命令行直接執(zhí)行這些命令,本質(zhì)上就是執(zhí)行對應的可執(zhí)行文件。
- 舉個例子:myapp包里面的package.json有這樣的配置:
{ "bin" : { "myapp" : "./cli.js" } },那么在安裝好myapp之后,就會生成一個cli.js文件與/usr/local/bin/myapp之間的映射關系。即執(zhí)行myapp命令,就是在執(zhí)行cli.js文件
man
- 指定一個單個文件或者一個由數(shù)個文件組成的數(shù)組,這些事為man命令準備的。
- 比如你的包的package.json如下:
{ "name" : "foo"
, "version" : "1.2.3"
, "description" : "A packaged foo fooer for fooing foos"
, "main" : "foo.js"
, "man" : "./man/doc.1"
}
- 那么在安裝完npm包后,執(zhí)行
man foo就會去打開./man/doc.1文檔顯示。這些文件命名,都以數(shù)字命名,來表示分別安裝到哪一個man section,如果文件是壓縮后的,還要加上.gz后綴。
repository
- 指明你的項目源代碼倉庫所在位置,這有助于其他人為你的項目貢獻(contribute)代碼,如果你的git項目是托管在GitHub上的,那么
npm docs命令是能夠找到的。
- 像下面這樣設置:
"repository" :
{ "type" : "git"
, "url" : "https://github.com/npm/npm.git"
}
"repository" :
{ "type" : "svn"
, "url" : "https://v8.googlecode.com/svn/trunk/"
}
- url字段應該為一個公共的可訪問的URL地址,這個URL地址可以直接交給版本控制系統(tǒng)(VCS)處理,這不應該是一個你的項目頁面的html地址,它不是提供給瀏覽器的,而是提供給計算機的。
- type則是表明,VCS的類型,一般都是用的git。
scripts
- script字段是一個包含腳本命令的詞典(dictionary),key值為生命周期的事件(lifecycle event)/或者自定義的命令,value值為具體的需要執(zhí)行的命令。
- 參考npm-scripts,查看具體的生命周期以及關于scripts屬性詳細的說明。
- 下面舉個簡單的示例:
{ "scripts" :
{ "install" : "scripts/install.js",
"postinstall" : "scripts/install.js",
"uninstall" : "scripts/uninstall.js",
"build": "node scripts/build.js"
}
}
- 上面前三個是npm安裝的生命周期事件,比如
install就表示,在安裝npm包時執(zhí)行后面的命令。而最后一個build就是自定義的命令了,可以用npm run build來執(zhí)行,相當于是執(zhí)行node scripts/build.js
config
-
config對象用來設置一些用于npm包的腳本命令會用到的配置參數(shù)。查看npm-config了解更多。
dependencies
- dependencies屬性是一個簡單的對象,包含了npm包名字與版本范圍(version range)的映射。版本范圍是一個字符串,包含了一個或多個描述符。dependencies同樣可以用一個tarball或git url來定義。
- 測試用的包或編譯代碼的包不應該放在dependencies對象,而應該放在devDependencies里。
- 下面是一些版本范圍的描述符
- version 版本號必須嚴格匹配等于version
- >version 版本號必須比version大
- >=version 大于等于
- <version 小于
- <=version 小于等于
- ~version "近似等價于version" 參考semver
- ^version "與version相兼容" 參考semver
- 1.2.x 1.2開頭的版本號都可以,1.2.0、1.2.1等等,但不能是1.1或1.3其他的。
- "" 空字符串與 * 相同
- version1 - version2 相當于 >=version1 <=version2.
- range1 || range2 range1和range2其中一個版本號.
devDependencies
- devDependencies結構和dependencies相似,但是都是開發(fā)時所依賴的包,如果別人只是使用或下載你的npm包,就不需要安裝這里面的
engine
- engine字段用來表示,你的項目所運行的node版本。不指定engine字段,或者用*表示不限制node版本。
os
- os字段表示你的npm包要在哪個操作系統(tǒng)上面運行
cpu
- 如果你的包需要運行在某些特定的CPU架構,則用cpu字段來描述。