We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
package.json是npm基于CommonJS规范的对包描述文件的定义,做了一些细节改变的npm包描述文件。
以下,带*的是可选字段,其他必须字段。
*
由小写字母、数字和.-_组成,不允许出现空格。包名必须是唯一的,且建议不添加js和node字段来标识是js模块。
当使用npm search命令时会搜索这个字段。
语义化的版本号,通常为主版本号.次版本号.修订号格式。
先行版本号及版本编译信息可以加到版本号后面,作为延伸。如1.2.3-release。
关键词作为数组存在,用于NPM中分类搜索,所以准确的关键词设定,有利于用户快速找到你的包。当使用npm search命令时会搜索这个字段。
每个维护者由name,email,web三个属性组成,如:
"maintainers": [{ "name": "Zhouboyu", "email": "zhouboyu@qq.com", "web": "tinper.org" }]
NPM通过该属性进行权限认证。
作者是一个人。
开源项目中,社区中人参与度比较高,对当前包贡献代码的可以添加进这个列表,一般第一个是作者,这个格式与维护者列表一样。
npm bugs用的上。
Config对象中的值在Scripts的整个周期中皆可用,专门用于给Scripts提供配置参数。
没有http://等带协议前缀的URL。
布尔值。如果你肯定你的程序只能在制定的engine上运行,设置为true。
。指定模块可以在什么操作系统上运行:
"os" : [ "darwin","Linux" ]
"os" : [ "!win32" ]
指定CPU型号。
"cpu" : [ "x64","ia32" ]
"cpu" : [ "!arm","!mips" ]
这个指令给当前包添加命令的,可以在命令行工具执行。当全局安装时,可以全局调用命令,当本地安装,可以在本地调用命令。
"bin": { "aa": "./bin/aa" }
当用户使用require引用模块时,,会优先使用这个字段,当没有没这个字段时,会查找包根目录下的index(.js/.node/.json)文件。
npm scripts 是写在package.json中scripts字段定义的脚本命令。
使用npm run script来执行脚本。 优点:
每当执行npm run,就会创建一个Shell,在Shell里执行指定的脚本,所以只要是Shell可执行的命令,就可以写在npm中。 当创建Shell时,会将node_modules/.bin子目录加入PATH中,执行完再恢复PATH。所以scripts中的脚本命令,不需要添加路径,可以直接写命令。
//no { "scripts": { "test": "./node_modules/.bin/mocha" } } //yes { "scripts": { "test": "mocha" } }
npm脚本的退出码,遵守Shell脚本规则。如果退出码不是0,npm就认为执行这个脚本时报。
npm可以使用Shell通配符。如:
"test": "mocha test/*.test.js"
但是如果要对原始命令使用通配符,要使用\转义。
\
npm脚本传参,使用--标识。 也可以再度封装命令。
--
"test": "mocha", "test:lint": "jshint *.js"
&并行执行&&顺序执行,还可以使用script-runner、npm-run-all、redrun等任务管理模块。
&
&&
npm提供两个默认脚本
"start": "node server.js", "install": "node-gyp rebuild"
第一个需要当前目录下有server.js文件,第二个需要当前目录下有binding.gyp文件。
npm脚本有pre和post两个钩子。
"pretest": "before", "test": "mocha", "posttest": "after"
执行npm run test会按照这个执行
npm run test
npm run pretest && npm run test && npm run posttest
所以可以使用钩子执行一些准备和联合操作。 默认提供的钩子:
const TARGET = process.env.npm_lifecycle_event; if (TARGET === "test") { console.log('run test'); } if (TARGET === "pretest") { console.log('run pretest'); } if (TARGET === "posttest") { console.log('run posttest'); }
npm脚本有一个非常强大得功能,可以使用npm内部变量
首先,通过npm_package前缀可以获取到package.json里面的字段。
//js脚本中 var name = process.env.npm_package_name; //shell脚本 $npm_package_name
使用npm_config可以拿到npm的配置变量,如npm_config_tag拿到发布标签,package.json的config的变量会被环境变量覆盖。
"name": "foo", "config": {"port": "8080"}
会被
npm config set foo:port 80
evn命令会列出所有环境变量
"env": "env"
当前包使用所依赖的列表。使用npm install --save 会添加包名到这个列表。
>version
>=version
在开发包时依赖的包列表。使用npm install --save-dev 会添加包名到这个列表。
兼容性依赖。如果你的包是插件,适合这种方式。
。发布包时同时打包的其他依赖。
如果你想在某些依赖即使没有找到,或则安装失败的情况下,npm都继续执行。那么这些依赖适合放在这里。
http://semver.org
The text was updated successfully, but these errors were encountered:
No branches or pull requests
package.json各个字段解读
package.json是npm基于CommonJS规范的对包描述文件的定义,做了一些细节改变的npm包描述文件。
以下,带
*
的是可选字段,其他必须字段。name 包名
由小写字母、数字和.-_组成,不允许出现空格。包名必须是唯一的,且建议不添加js和node字段来标识是js模块。
description * 包描述。
当使用npm search命令时会搜索这个字段。
version 版本号
语义化的版本号,通常为主版本号.次版本号.修订号格式。
先行版本号及版本编译信息可以加到版本号后面,作为延伸。如1.2.3-release。
keywords * 关键词
关键词作为数组存在,用于NPM中分类搜索,所以准确的关键词设定,有利于用户快速找到你的包。当使用npm search命令时会搜索这个字段。
maintainers * 包维护者列表
每个维护者由name,email,web三个属性组成,如:
NPM通过该属性进行权限认证。
author * 作者
作者是一个人。
contributions * 贡献者列表
开源项目中,社区中人参与度比较高,对当前包贡献代码的可以添加进这个列表,一般第一个是作者,这个格式与维护者列表一样。
bugs * 一个可以反馈bug的地址或邮件地址。
npm bugs用的上。
licenses * 许可证列表
repositories * 托管代码的位置列表
config * 配置对象
Config对象中的值在Scripts的整个周期中皆可用,专门用于给Scripts提供配置参数。
homepage * 网站地址
没有http://等带协议前缀的URL。
engine * 支持的Javascript引擎列表
engineStrick *
布尔值。如果你肯定你的程序只能在制定的engine上运行,设置为true。
Os *
。指定模块可以在什么操作系统上运行:
"os" : [ "darwin","Linux" ]
"os" : [ "!win32" ]
CPU *
指定CPU型号。
"cpu" : [ "x64","ia32" ]
"cpu" : [ "!arm","!mips" ]
directories * 目录说明
bin * 添加命令
这个指令给当前包添加命令的,可以在命令行工具执行。当全局安装时,可以全局调用命令,当本地安装,可以在本地调用命令。
mian * 入口地址
当用户使用require引用模块时,,会优先使用这个字段,当没有没这个字段时,会查找包根目录下的index(.js/.node/.json)文件。
scripts * 脚本说明对象
npm scripts 是写在package.json中scripts字段定义的脚本命令。
使用npm run script来执行脚本。
优点:
原理
每当执行npm run,就会创建一个Shell,在Shell里执行指定的脚本,所以只要是Shell可执行的命令,就可以写在npm中。
当创建Shell时,会将node_modules/.bin子目录加入PATH中,执行完再恢复PATH。所以scripts中的脚本命令,不需要添加路径,可以直接写命令。
npm脚本的退出码,遵守Shell脚本规则。如果退出码不是0,npm就认为执行这个脚本时报。
通配符
npm可以使用Shell通配符。如:
但是如果要对原始命令使用通配符,要使用
\
转义。传参
npm脚本传参,使用
--
标识。也可以再度封装命令。
执行顺序
&
并行执行&&
顺序执行,还可以使用script-runner、npm-run-all、redrun等任务管理模块。默认值
npm提供两个默认脚本
第一个需要当前目录下有server.js文件,第二个需要当前目录下有binding.gyp文件。
钩子
npm脚本有pre和post两个钩子。
执行
npm run test
会按照这个执行所以可以使用钩子执行一些准备和联合操作。
默认提供的钩子:
自定义的命令也可以添加pre和post钩子,不过双重的prepre和postpost无效
npm还提供一个npm_lifecycle_event变量,返回当前执行脚本的名称,所以可以利用这个变量,在一个脚本文件内,为不同的scripts命令编写代码。如
简写形式
执行顺序为
prerestart > prestop > stop > poststop > restart > prestart > start > poststart > postrestart
变量
npm脚本有一个非常强大得功能,可以使用npm内部变量
首先,通过npm_package前缀可以获取到package.json里面的字段。
使用npm_config可以拿到npm的配置变量,如npm_config_tag拿到发布标签,package.json的config的变量会被环境变量覆盖。
会被
evn命令会列出所有环境变量
dependencies * 依赖列表
当前包使用所依赖的列表。使用npm install --save 会添加包名到这个列表。
版本格式
>version
大于这个版本>=version
大于或等于这个版本*
任何版本都可以devDependencies * 开发依赖列表
在开发包时依赖的包列表。使用npm install --save-dev 会添加包名到这个列表。
peerDependencies *
兼容性依赖。如果你的包是插件,适合这种方式。
bundledDependencies *
。发布包时同时打包的其他依赖。
optionalDependencies *
如果你想在某些依赖即使没有找到,或则安装失败的情况下,npm都继续执行。那么这些依赖适合放在这里。
参考
http://semver.org
The text was updated successfully, but these errors were encountered: