npm模块依赖项存储在名为package.json的配置文件中,该文件位于项目的根目录中。package.json中的JSON数据必须遵循某个模式。它必须有包的名称和版本。包名称由name字段指定。该名称应该在npm注册表中是包的唯一标识。
通过使用npm,该名称将成为URL的一部分、命令行参数和目录名称。因此,名称不能以点或下划线开头,不能包含空格或任何其他非网址安全字符。
公共包必须在npm注册表中具有唯一的名称。
下面的代码有一个最小的package.json文件
{"name": "package-name", "version": "0.0.0"}
包的版本在版本字段中指定。版本,当与名称结合时,为包提供真正唯一的标识符。版本号指定主版本,次版本和修补程序号,用点分隔。npm允许版本以 v
字符开头。
你可以通过将标记附加到补丁编号来指定内部版本号。有两种类型的标签,prerelease和postrelease。Postrelease标签增加版本号,而prerelease标签减少它。postrelease标记是数字跟随的连字符,其他标签都是prerelease标签。
以下示例显示版本标签。
0.9.6-7 0.9.6-7-beta 0.9.6-6 0.9.6 0.9.6beta
description和keywords
description字段提供包的文本描述。
keywords字段提供了一组关键字来描述包。
下面的代码显示了一个包含description和keywords字段的package.json。
"description": "This is a description of the module", "keywords": ["foo", "search", "baz"]
author和contributors
主作者在author字段中指定,其中只能包含一个条目。contributors可以包含一组人。
有两种方法可以指定一个人。
"author": {"name": "Your Name", "email": "[email protected]", "url": "https://www.ancii.com"},"contributors": [{"name": "Name 1", "email": "[email protected]", "url": "https://www.ancii.com"}, {"name": "Name 2", "email": "[email protected]", "url": "https://www.ancii.com" } ]
或者
"author": "Your Name <[email protected]> (https://www.ancii.com)", "contributors": ["Name 1 <[email protected]> (https://www.ancii.com)", "Name 2 <[email protected]> (https://www.ancii.com)"]
主入口点
包的主入口点文件存储在package.json文件中。main
字段告诉Node当使用 require()
时要加载哪个文件。
将主入口点设置到位于 src
子目录中的名为 bar.js
的文件。
"main": "./src/bar.js"
preferGlobal设置
要提醒用户全局安装软件包,请使用 preferGlobal
设置
dependencies
包的依赖关系在package.json文件的dependencies字段中指定。
版本字符串可以是npm理解的任何版本表达式,包括git和tarball URL。
以下代码仅根据命令器设置包的dependencies字段。
"dependencies": { "commander": "1.2.x"}
devDependencies
要包括仅用于测试和开发的包的依赖关系,使用devDependencies字段。
"devDependencies": { "mocha": "~1.8.1"}
开发依赖可以自动添加到package.json文件中。
为此,请将--save-dev标志附加到npm install命令。
npm install mocha --save-dev
可选依赖关系
使用可选的依赖项,npm将继续,尽管它们不存在。可选依赖项列在optionalDependencies字段中。
通过为npm install指定 --save-optional
标志,可以在安装期间将可选依赖性添加到package.json文件。
要加载可选的包,可使用 try...catch
和 if
语句。
下面的代码假设 commander
是一个可选的依赖。
如果commander不存在,require()
函数会抛出一个异常,然后将其封装在try...catch
语句中。
在使用之前检查commander是否具有定义的值。
var commander;try { commander = require("commander"); } catch (exception) { commander = null; }if (commander) { // do something with commander }
engines
engines字段指定模块的node版本和npm。
"engines": {"node": ">=0.10.12", "npm": "1.2.x"}
scripts
scripts字段(如果存在)包含npm命令到脚本命令的映射。脚本命令在外部shell进程中运行。它们可以是任何可执行的命令。两个最常用的命令是start和test。
start命令启动你的应用程序,并测试运行一个或多个应用程序的test脚本。
"scripts": { "start": "node server.js", "test": "echo \"message\" && exit 1"}
要执行start和test命令,只需将命令名传递给npm。
$ npm test
其他字段
你可以在homepage
字段中列出项目的主页,在license
字段中列出软件许可证类型,以及在repository
字段中列出项目源代码的存储库。
获取有关package.json文件的更多信息,可发出命令 npm help json
。