每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。npm install 命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。
package.json文件可以手工编写,也可以使用npm init命令自动生成。
注意:npm init 时,用户需回答一些问题,然后在当前目录生成一个基本的package.json文件。所有问题之中,只有项目名称(name)和项目版本(version)是必填的,其他都是选填的。
scripts指定了运行脚本命令的npm命令行缩写,比如start指定了运行npm run start时,所要执行的命令。 下面的设置指定了npm run preinstall、npm run postinstall、npm run start、npm run test时,所要执行的命令。
"scripts": {
"preinstall": "echo here it comes!",
"postinstall": "echo there it goes!",
"start": "node index.js",
"test": "tap test/*.js"
}
dependencies和devDependencies两项,分别指定了项目运行所依赖的模块、项目开发所需要的模块。
npm install express --save
npm install express --save-dev
--save参数表示将该模块写入dependencies属性, --save-dev表示将该模块写入devDependencies属性。
bin项用来指定各个内部命令对应的可执行文件的位置。
"bin": {
"someTool": "./bin/someTool.js"
}
上面代码指定,someTool 命令对应的可执行文件为 bin 子目录下的 someTool.js。Npm会寻找这个文件,在node_modules/.bin/目录下建立符号链接。在上面的例子中,someTool.js会建立符号链接npm_modules/.bin/someTool。由于node_modules/.bin/目录会在运行时加入系统的PATH变量,因此在运行npm时,就可以不带路径,直接通过命令来调用这些脚本。
config字段用于向环境变量输出值。
{
"name" : "foo",
"config" : { "port" : "8080" },
"scripts" : { "start" : "node server.js" }
}
然后,在server.js脚本就可以引用config字段的值。
http.createServer(...).listen(process.env.npm_package_config_port)
用户可以改变这个值。
$ npm config set foo:port 80
只用name和version必须的!!!
注意: (1)name中不能包含汉子、空格、不能以点号或下划线开头; (2)不要在name中包含js, node字样; (3)这个名字可能在require()方法中被调用,所以应该尽可能短;
注意:npm采用”语义版本“管理软件包。所谓语义版本,就是指版本号为a.b.c的形式,其中a是大版本号,b是小版本号,c是补丁号。
{
"url" : "http://github.com/owner/project/issues",
"email" : "project@hostname.com"
}
{ "license" : "BSD-3-Clause" }
{
"name" : "Li Gang",
"email" : "ligang_WEB@163.com",
"url" : "http://blog.csdn.net/ligang2585116/"
}
注意:请不要将测试或过渡性的依赖放在dependencies中
注意:如果有人要用你的模块,但他们可能不需要你开发所使用的外部测试或者文档框架。
{ "engines" : { "node" : ">=0.10.3 <0.12" } }
注意:这是一个防止意外发布私有库的方式。如果你要确定给定的包是只发布在特定registry(如内部registry)的,用publishConfig hash的描述来重写registry的publish-time配置参数。
完整的字段说明:http://www.mujiang.info/translation/npmjs/files/package.json.html