npm常用命令
总结一下npm常用的命令。
1 | npm -v |
npm生命周期的命令
install: 安装依赖。
npm run install
的默认值是node-gyp rebuild
,前提是项目根目录下有binding.gyp
文件。
build:构建项目。
npm 脚本有pre
和post
两个钩子。举例来说,build
脚本命令的钩子就是prebuild
和postbuild
。
1 | // package.json |
rebuild:重新构建。
test:测试。
start:开发阶段启动服务。
上面代码中,npm run start
的默认值是node server.js
,前提是项目根目录下有server.js
这个脚本。
restart:重新启动。
npm restart
是一个复合命令,实际上会执行三个脚本命令:stop
、restart
、start
。具体的执行顺序如下。
- prerestart
- prestop
- stop
- poststop
- restart
- prestart
- start
- poststart
- postrestart
stop:停止服务。
publish:对外发布package。
republish
npm default hook
npm命令的默认钩子命令。
- prepublish,postpublish
- preinstall,postinstall
- preuninstall,postuninstall
- preversion,postversion
- pretest,posttest
- prestop,poststop
- prestart,poststart
- prerestart,postrestart
注意:
prepublish
这个钩子不仅会在npm publish
命令之前运行,还会在npm install
(不带任何参数)命令之前运行。这种行为很容易让用户感到困惑,所以 npm 4 引入了一个新的钩子prepare
,行为等同于prepublish
,而从 npm 5 开始,prepublish
将只在npm publish
命令之前运行。
npm shortcut commands
四个常用的 npm 脚本有简写形式。
npm start
是npm run start
npm stop
是npm run stop
的简写npm test
是npm run test
的简写npm restart
是npm run stop && npm run restart && npm run start
的简写npm run
是npm run-script
的简写。
npm config
好多内容以后在补充。
npm scripts
变量
node
环境中可以引用package.json
和bash
等变量。
变量前缀:npm_package_
npm 脚本有一个非常强大的功能,就是可以使用 npm 的内部变量。
首先,通过npm_package_
前缀,npm 脚本可以拿到package.json
里面的字段。比如,下面是一个package.json
。
1
2
3
4
5
6
7
8 > {
> "name": "foo",
> "version": "1.2.5",
> "scripts": {
> "view": "node view.js"
> }
> }
>
那么,变量npm_package_name
返回foo
,变量npm_package_version
返回1.2.5
。
1
2
3
4 > // view.js
> console.log(process.env.npm_package_name); // foo
> console.log(process.env.npm_package_version); // 1.2.5
>
上面代码中,我们通过环境变量process.env
对象,拿到package.json
的字段值。
变量前缀:$npm_package (bash变量)
如果是 Bash 脚本,可以用$npm_package_name
和$npm_package_version
取到这两个值。
变量:npm_config_
npm 脚本还可以通过npm_config_
前缀,拿到 npm 的配置变量,即npm config get xxx
命令返回的值。比如,当前模块的发行标签,可以通过npm_config_tag
取到。
1 | // config |
环境变量覆盖package.json的config对象
package.json
里面的config
对象,可以被环境变量覆盖。
1 | { |
上面代码中,npm_package_config_port
变量返回的是8080
。这个值可以用下面的方法覆盖。
1 | $ npm config set foo:port 80 |
package.json
详情见:http://javascript.ruanyifeng.com/nodejs/packagejson.html
package.lock.json
npm5
以后,每次npm install
会自动创建package.lock.json
,但是有一些潜规则。
- 如果
package.json
和package.lock.json
一致,则使用package.lock.json
中的配置。 - 如果
package.json
和package.lock.json
不一致,则使用package.json
中的配置。