我们在拿到一个项目之后,我们都会找到package.json中的script,甚至在做项目做久之后,我们也会自己写一些脚本来给开发提效。
但是如何传递一个参数给脚本?如何执行某个脚本文件呢?
介绍
NPM脚本是package.json中定义的一组内置脚本和自定义脚本,他们的目标就是提供一种简单的方法来执行重复的任务。
如:
·启动项目
·打包项目
·执行单元测试,生成测试报告之类
···
如何定义一个脚本?
"scripts": { "test": "echo \"Error: no test specified\" && exit 1" }
值得注意:NPM中所有依赖的node_modules bin都可以在脚本中直接访问,就像在路径中被引用的都一样,也就是默认会加"./node_modules/.bin",比如:
{ "scripts": { "lint": "./node_modules/.bin/eslinteslint .", } }
命令
"npm run test"和"npm test”都可以执行脚本,这是因为,有些脚本是内置可以使用更短的命名来执行的,更容易记住,
例如,下面所有的命令效果都是一样的:
npm run-script test npm run test npm test
执行多个脚本
我们可能想结合一些脚本并一起运行他们。为此,我们可以使用&&或&
要依次运行多个脚本,使用&&,例如:
npm run lint && npm test
要并行执行多个脚本,可以使用&,例如:
npm run lint & npm test
注意:这仅适用于Unix环境,在windows中,它将按顺序运行。
因此:在实际项目中可以直接创建一个结合了两个脚本,以此来简化我们的操作。
{ "script": { "start": "node index.js", "start1": "node index.js", "test": "npm run start & npm run start1" } }
pre 和 post
我们可以为任何脚本创建"pre"和"post"脚本,NPM会自动按顺序运行他们。唯一的要求就是脚本的名称(后跟"pre"或"pos”前缀)与主脚本匹配。
{ "prehello": "echo \" prescript \"", "hello": "echo \"Hello World\"", "posthello": "echo \" postscript \"" }
如果我们执行npm run hello,npm会按顺序执行脚本"prehello","hello","posthello",输出如下:
> example@0.1.0 prehello E:\资源\example > echo " prescript " " prescript " > example@0.1.0 hello E:\资源\example > echo "Hello World" "Hello World" > example@0.1.0 posthello E:\资源\example > echo " postscript " " postscript "
错误
当脚本以非0退出码结束时,这意味着在运行脚本的时候发生了错误,并终止执行
{ "scripts": { "test": "exit 1" } }
在脚本抛出错误的时候,我们会得到其他细节,比如错误号error和代码,具体的错误日志路径都可以在终端获取到。
npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! example@0.1.0 demo: `exit 1` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the example@0.1.0 demo script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\Lenovo\AppData\Roaming\npm-cache\_logs\2021-04-17T06_34_59_579Z-debug.log
静默模式
如果想减少错误日志并非防止防止脚本抛出错误,可以使用下面的命令来”静默“处理,(比如在ci中,即使测试命令失败,也希望整个管道继续运行,就可以使用这个命令)
npm run <script> --silent
npm run <script> -s
从文件中引用路径
如果脚本很复杂的话,在package.json中维护明显会越来越冗长,也越来越难维护,因此复杂的脚本我们一般会写在文件中,在从文件中执行脚本,如下:
{ "hello.js": "node scripts/helloworld.js", "hello:bash": "bash scripts/helloworld.sh", "hello:cmd": "cd scripts && helloworld.cmd" }
我们使用node <path.js>来执行js文件,使用bash <path.sh>来执行bash文件
值得注意的是,如果是cmd或bat文件,则需要先cd导航到对应的文件夹目录,不能像sh,js文件一样,直接执行,否则会报错
访问环境变量
在执行NPM脚本时,NPM提供了一组我们可以使用的环境变量,我们可以使用
npm_config_<val> 或者 npm_package_<val>
原文:https://www.cnblogs.com/csslog/p/14670800.html