{ "name" : "foo"
, "config" : { "port" : "8080" } }
然后有一个“start”命令引用了npm_package_config_port环境变量,用户可以通过npm config set foo:port 8001来重写他。
参见 npm-config(7) 和 npm-scripts(7)。
dependencies
依赖是给一组包名指定版本范围的一个hash。这个版本范围是一个由一个或多个空格分隔的字符串。依赖还可以用tarball或者git URL。
请不要将测试或过渡性的依赖放在dependencieshash中。见下文的devDependencies。
详见semver(7).
1.version 必须完全和version一致
2.>version 必须比version大
3.>=version 同上
4.<version 同上
5.<=version 同上
6.~version 大约一样,见semver(7)
7.1.2.x 1.2.0, 1.2.1, 等,但不包括1.3.0
8. 见下文'依赖URL'
9.* 所有
10."" 空,同*
11.version1 - version2 同 >=version1 <=version2.
12.range1 || range2 二选一。
13.git... 见下文'依赖Git URL'
14.user/repo 见下文'GitHub URLs'
15.比如下面都是合法的:
复制代码 代码如下:
{ "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"
}
}
依赖URL
可以指定一个tarball URL,这个tarball将在包被初始化的时候下载并初始化。
依赖Git URL
Git urls 可以是下面几种形式:
复制代码 代码如下:
git://github.com/user/project.git#commit-ish
git+ssh://user@hostname:project.git#commit-ish
git+ssh://user@hostname/project.git#commit-ish
git+@hostname/project/blah.git#commit-ish
git+https://user@hostname/project/blah.git#commit-ish
commit-ish是可以被git checkout的任何tag、sha或者branch。默认为master。
GitHub URLs
1.1.65版后,你可以仅仅用“user/foo-project”引用GitHub urls,比如:
复制代码 代码如下:
{
"name": "foo",
"version": "0.0.0",
"dependencies": {
"express": "visionmedia/express"
}
}
devDependencies
如果有人计划在他们的程序中下载并使用你的模块,那么他们可能不想或者不需要去下载并构建你使用的外部测试或者文档框架。
在这种情况下,它最好把这些附属的项目列示在devDependencies hash中。
这些东西会在根目录执行npm link或者npm install的时候初始化,并可以像其他npm配置参数一样管理。详见npm-config(7)。
对于非特定平台的构建步骤,比如编译CoffeeScript或者其他语言到Javascript,用prepublish脚本去实现并把他放在devDependency中。
比如:
复制代码 代码如下:
{ "name": "ethopia-waza",
"description": "a delightfully fruity coffee varietal",
"version": "1.2.3",
"devDependencies": {
"coffee-script": "~1.6.3"
},
"scripts": {
"prepublish": "coffee -o lib/ -c src/waza.coffee"
},
"main": "lib/waza.js"
}
prepublish脚本会在publishing前运行,这样用户就不用自己去require来编译就能使用。并且在开发模式中(比如本地运行npm install)会运行这个脚本以便更好地测试。
peerDependencies
在一些场景中,如在一个host中不必须进行require时候,你想表现你的package与一个host工具或者库的兼容关键。这一般用来引用插件。尤其是你的模块可能要暴露一个特定的接口,并由host文档来预期和指定。
比如:
复制代码 代码如下:
{
"name": "tea-latte",
"version": "1.3.5"
"peerDependencies": {
"tea": "2.x"
}
}
这能保证你的package可以只和tea的2.x版本一起初始化。npm install tea-latte可能会产生下面的依赖关系
复制代码 代码如下:
├â”â” tea-latte@1.3.5
â””â”â” tea@2.2.0
试图初始化另一个有会冲突的依赖的插件将导致一个错误。因此,确保你的插件的需求约束越弱越好,而不要去把它锁定到一个特定的版本。