深入理解npm run命令,run命令的两条潜规则
发布于 作者:苏南大叔 来源:程序如此灵动~
大家在调试node系列的程序的时候,一般少不了使用npm安装依赖,然后再执行npm run命令,而大家可能不知道的是,npm run包含着两个潜规则。

在本文中,苏南大叔描述的就是npm run的潜规则:pre和post。而且在查看本文的内容前,您一定要知晓:npm run命令都是定义在package.json文件的scripts节点里面的。测试环境:mac,npm@6.14.3。
基本定义
下面是个例子,package.json定义如下:
{
"name": "nnn",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "echo \"test\"",
"predev": "echo \"before dev\"",
"dev": "echo \"deving\"",
"postdev": "echo \"after dev\""
},
"author": "sunan",
"license": "ISC"
}
潜规则一:npm start和npm run start
对于命令npm run ***,如果***是start字样,就可以省略run字样。这个是目前为止,苏南大叔知道的唯一可以省略run字样的命令。是不是有其他的?有的话,请留言哦。
下面的两个命令是等同的:
npm startnpm run start
潜规则二:pre和post
对于某个命令***,如果定义:
pre***,那么就会在npm run ***之前运行。post***,那么就会在npm run ***之后运行。
例如:
"scripts": {
"start": "echo \"test\"",
"predev": "echo \"before dev\"",
"dev": "echo \"deving\"",
"postdev": "echo \"after dev\""
},那么,当***为dev的时候,执行npm run dev的话,结果如下:

***可以是start哦,在这个语境下,start是没有特殊身份的,也符合pre和post潜规则。
相关链接
总结
当然,对于特殊的start命令,定义prestart和poststart,也是可以生效的。npm的这个pre和post的潜规则,是苏南大叔在看httptoolkit的源码的时候,发现的。嘿嘿,有点孤落寡闻了。更多npm的相关文章,请点击苏南大叔的博客: