這里只截取了部分常用的選項(xiàng),全部?jī)?nèi)容戳這里
概述
注意package.json必須是純JSON的,而不僅僅是一個(gè)JavaScript對(duì)象字面量。
該文件描述的很多行為都受npm-config中的配置影響。
下面分別介紹package.json中常用字段的含義和用法。
name
name和version字段是package.json文件中最重要的字段。這是必須的字段,如果你的npm包沒有指定這兩個(gè)字段,將無(wú)法被安裝。name和version字段被假定組合成一個(gè)唯一的標(biāo)識(shí)符。包內(nèi)容的更改和包版本的更改是同步的。
version
name和version字段是package.json文件中最重要的字段。這是必須的字段,如果你的npm包沒有指定這兩個(gè)字段,將無(wú)法被安裝。name和version字段被假定組合成一個(gè)唯一的標(biāo)識(shí)符。包內(nèi)容的更改和包版本的更改是同步的。
version字段必須能夠被node-semver解析,node-semver作為依賴項(xiàng)被捆綁進(jìn)了npm中。(可以使用npm install semver來(lái)使用)
description
npm包的描述,description是一個(gè)字符串。它可以幫助人們?cè)谑褂胣pm search時(shí)找到這個(gè)包。
keywords
npm包的關(guān)鍵字,keywords是一個(gè)字符串的數(shù)組。它可以幫助人們?cè)谑褂胣pm search時(shí)找到這個(gè)包。
license
你應(yīng)該對(duì)你的包指定一個(gè)license來(lái)讓用戶知道他們的使用權(quán)利和和任何限制。
如果你正在使用BSD-2-Clause或MIT這樣的通用許可證,可以為你的license添加一個(gè)當(dāng)前SPDX的許可證標(biāo)識(shí)符,比如:
{ "license" : "ISC" }
如果你不希望授權(quán)別人以任何形式使用私有包或未發(fā)布的包,可以這樣寫:
{ "license": "UNLICENSED"}
或者
"private": true
來(lái)防止意外的發(fā)布。
關(guān)于人的字段: author, contributors
author是一個(gè)人,contributors是一些人的數(shù)組。person是一個(gè)對(duì)象,擁有必須的name字段和可選的url和email字段,像這樣:
{
"name": "BB",
"email": "bb@react.com",
"url": "http://bb.cc.com/"
}
或者你也可以使用單個(gè)字符串的精簡(jiǎn)形式,npm會(huì)幫你解析它:
"BB <bb@react.com> (http://bb.cc.com/)"
main
main字段指定了模塊的入口程序文件。就是說(shuō),如果你的模塊名叫"foo",用戶安裝了它,并且調(diào)用了 require("foo"),則這個(gè)main字段指定的模塊的導(dǎo)出對(duì)象會(huì)被返回。
這應(yīng)該是一個(gè)相對(duì)于包根目錄的模塊標(biāo)識(shí)。
對(duì)于大部分模塊來(lái)說(shuō),main字段除了指定一個(gè)主入口文件以外沒什么其他用處了。
scripts
scripts字段是一個(gè)由腳本命令組成的字典,這些命令運(yùn)行在包的各個(gè)生命周期中。這里的鍵是生命周期事件名,值是要運(yùn)行的命令??梢詤⒖?a target="_blank" rel="nofollow">npm-scripts獲取配置scripts的更多信息。
dependencies
dependencies字段是一個(gè)對(duì)象,它指定了依賴的包名和其版本范圍的映射。版本范圍是個(gè)有一個(gè)或多個(gè)空白分隔描述符的字符串。dependencies字段還可以用tarball或者git URL。
請(qǐng)不要將測(cè)試或過渡性的依賴放到dependencies中,請(qǐng)參考下面的devDependencies。
可以參考semver獲取更多關(guān)于指定版本范圍的細(xì)節(jié)信息。
- version 必須確切匹配這個(gè)version
- >version 必須大于這個(gè)version
- >=version 必須大于等于這個(gè)version
- < version 必須小于這個(gè)version
- <=version 必須小于等于這個(gè)version
- ~version 大約相當(dāng)于version,參考semver
- ^version 與version兼容,參考semver
- 1.2.x 可以是1.2.0、1.2.1等,但不能是1.3.0
- http://... 參考下面的URL作為依賴項(xiàng)
- * 匹配任何版本
- ""(空字符串) 匹配任何版本,和*一樣
- version1 - version2 相當(dāng)于 >=version1 <=version2
- range1 || range2 range1或range2其中一個(gè)滿足時(shí)采用該version
- git... 參考下面的Git URL作為依賴項(xiàng)
- user/repo 參考下面的GitHub URLs
- tag 一個(gè)以tag發(fā)布的指定版本,參考npm-tag
- path/path/path 參考下面的本地Paths
舉個(gè)栗子,下面這種寫法是合法的:
{
"dependencies": {
"foo": "1.0.0 - 2.9999.9999",
"bar": ">=1.0.2 <2.1.2",
"baz": ">1.0.2 <=2.3.4",
"boo": "2.0.1",
"qux": "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0",
"asd": "http://asdf.com/asdf.tar.gz",
"til": "~1.2",
"elf": "~1.2.3",
"two": "2.x",
"thr": "3.3.x",
"lat": "latest",
"dyl": "file:../dyl"
}
}
devDependencies
如果有人計(jì)劃在他們的項(xiàng)目中下載和使用你的模塊,但他們可能并不想或并不需要你開發(fā)所使用的外部測(cè)試和文檔框架。
在這種情況下,最好將這些附加的項(xiàng)放在devDependencies中。
這些項(xiàng)將會(huì)在根目錄下執(zhí)行npm link或npm install時(shí)被安裝,并且可以像其他npm配置參數(shù)一樣被管理??梢詤⒖?a target="_blank" rel="nofollow">npm-config獲得更多信息。
對(duì)于那些非特定平臺(tái)的構(gòu)建步驟,比如編譯CoffeeScript或把其他語(yǔ)言轉(zhuǎn)換成JavaScript,可以使用prepublish腳本來(lái)處理,并且把這個(gè)過程的依賴包放在devDependencies中。
os
可以指定模塊運(yùn)行的操作系統(tǒng):
"os" : [ "darwin", "linux" ]
也可以使用操作系統(tǒng)黑名單來(lái)替代白名單,只要在前面加個(gè)'!':
"os" : [ "!win32" ]
主機(jī)的操作系統(tǒng)可以通過process.platform來(lái)確定。
雖然找不到什么很好的理由支持這么做,但是這里還可以黑名單和白名單混用。
private
如果你在包的package.json中設(shè)置"private": true,則npm會(huì)拒絕發(fā)布它。
這是防止私有包被以外發(fā)布的一種方法。如果你希望包裝某個(gè)包只能被發(fā)布到特定的一個(gè)registry中(比如,一個(gè)內(nèi)部的registry),則可以使用下面的publishConfig字典來(lái)描述以在publish-time重寫registry配置參數(shù)。