npm script

简介

npm 允许在package.json文件里面,使用scripts字段定义脚本命令

npm run 实际上是 npm run-script 命令的简写

以传给 npm run 的第一个参数作为键,如dev,在 package.json 的 scripts 对象里面获取对应的值作为接下来要执行的命令,如果没找到直接报错;

每执行一次npm run,就会新建一个 Shell执行指定的脚本命令。因此,只要是 可运行的Shell(一般是 Bash)命令,就可以写在 npm script里面。

npm run新建的这个 Shell,会将当前目录的node_modules/.bin子目录加入PATH变量,执行结束后,再将PATH变量恢复原样。因此子目录里面的所有脚本,都可以直接用脚本名调用,而不必加上路径,比如,当前项目的依赖里面有 Mocha,直接写mocha test就可以了

常用指令

  1. npm init : 初始化项目
  2. npm run :运行脚本
  3. npm install :安装模块
  4. npm uninstall :卸载模块 
  5. npm update :升级模块
  6. npm search :查找模块
  7. npm view :查看模块版本
  8. npm bin :查看bin目录
  9. npm link :将工程链接到全局
  10. npm publish : 发布包
  11. npm deprecate : 废弃包
  12. npm help :查看全部指令

进阶

npm script 内部变量

npm rrun 执行的时候将package.json中的字段读取转换成了shell变量,可以通过 $npm_package_* 的形式直接访问到package.json中的字段

$npm_package_name         //name in package.json
$npm_package_version      //version in package.json
$npm_package_config_var1  //config.var1 in package.json

npm script参数传递

-- 参数透传

//package.json

"scripts": {
    "lint:js": "eslint *.js",
    "lint:js:fix": "eslint *.js --fix",
},

"scripts": {
    "lint:js": "eslint *.js",
    "lint:js:fix": "npm run lint:js -- --fix",
},

上面两种写法中显然后者更佳,参数传递上有些区别:--fix 参数前面的 -- 分隔符,意指要给 npm run lint:js 实际指向的命令传递额外的参数

npm script脚本钩子

为了方便开发者自定义,npm script 的设计者为命令的执行增加了类似生命周期的机制。这种特性在某些操作前需要做检查、某些操作后需要做清理的情况下非常有用。

例如 npm run cover 的时候,分 3 个阶段:

  1. 检查 scripts 对象中是否存在 precover 命令,如果有,先执行该命令;
  2. 检查是否有 cover 命令,有的话运行 cover 命令,没有的话报错;
  3. 检查是否存在 postcover 命令,如果有,执行 postcover 命令;


常见npm内置脚本钩子如下 :

preinstall        //用户执行npm install命令时,先执行该脚本
postinstall       //用户执行npm install命令时,安装结束后执行该脚本
preuninstall      //卸载一个模块前执行
postuninstall     //卸载一个模块后执行
prelink           //Link模块前执行
postlink          //Link模块后执行
pretest           //运行npm test命令前执行。
posttest          //运行npm test命令后执行

规律:pre_* / post_*

除了内置脚本钩子,我们也可以按规则自定义地添加钩子

例子:测试覆盖率

"scripts": {
    "precover": "rm -rf coverage",
    "cover": "nyc --reporter=html npm test",
    "postcover": "rm -rf .nyc_output && opn coverage/index.html"
}

precover :收集覆盖率之前把之前的覆盖率报告目录清理掉;

cover :直接调用 nyc,让其生成 html 格式的覆盖率报告;

postcover :清理掉临时文件,并且在浏览器中预览覆盖率报告;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值