npm常用命令

总结一下npm常用的命令。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
npm -v
npm install -g npm@latest
npm install -g npm@next
npm install -g npm@version
npm update
npm outdated

npm uninstall lodash

# 如需从 package.json 文件中删除依赖,需要在命令后添加参数 --save
npm uninstall --save lodash

# package.json 文件中依赖devDependency,就是--save-dev 参数保存的
# 必须通过 --save-dev 参数可以将其卸载。
npm uninstall --save-dev lodash

npm生命周期的命令

install: 安装依赖。

npm run install的默认值是node-gyp rebuild,前提是项目根目录下有binding.gyp文件。

build:构建项目。

npm 脚本有prepost两个钩子。举例来说,build脚本命令的钩子就是prebuildpostbuild

1
2
3
4
5
6
7
8
// package.json
{
"scripts": {
"prebuild": "echo I run before the build script",
"build": "cross-env NODE_ENV=production webpack",
"postbuild": "echo I run after the build script"
}
}

rebuild:重新构建。

test:测试。

start:开发阶段启动服务。

上面代码中,npm run start的默认值是node server.js,前提是项目根目录下有server.js这个脚本。

restart:重新启动。

npm restart 是一个复合命令,实际上会执行三个脚本命令:stoprestartstart。具体的执行顺序如下。

  1. prerestart
  2. prestop
  3. stop
  4. poststop
  5. restart
  6. prestart
  7. start
  8. poststart
  9. 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 startnpm run start
  • npm stopnpm run stop的简写
  • npm testnpm run test的简写
  • npm restartnpm run stop && npm run restart && npm run start的简写
  • npm runnpm run-script的简写。

npm config

好多内容以后在补充。

npm scripts

变量

node环境中可以引用package.jsonbash等变量。

变量前缀: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
2
3
4
// config
{
"view": "echo $npm_config_tag"
}

环境变量覆盖package.json的config对象

package.json里面的config对象,可以被环境变量覆盖。

1
2
3
4
5
{ 
"name" : "foo",
"config" : { "port" : "8080" },
"scripts" : { "start" : "node server.js" }
}

上面代码中,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.jsonpackage.lock.json一致,则使用package.lock.json中的配置。
  • 如果package.jsonpackage.lock.json不一致,则使用package.json中的配置。