Npm Script
我们在拿到一个项目之后,我们都会找到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
- day6、Linux下如何找出7天以前的文件删除
- django模板语法之include
- day7、用户登陆出现-bash-4.1$错误的原因
- Django--admin源码流程
- Spring Security笔记:Remember Me(下次自动登录)
- day8、 显示Linux路由表、各列信息
- day9、用户登陆出现-bash-4.1$错误的原因及解决方法
- jboss eap 6.3 域(Domain)模式配置
- 揭穿数据分析的12个神话
- jboss eap 6.3 集群(cluster)配置
- Django中Q查询及Q()对象
- jboss eap 6.3 集群(cluster)-Session 复制(Replication)
- JSP中的Servlet及Filter
- Django ORM详解
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 剑指Offer LeetCode 面试题50. 第一个只出现一次的字符
- 剑指Offer LeetCode 面试题40. 最小的k个数
- 剑指Offer LeetCode 面试题39. 数组中出现次数超过一半的数字
- 解决Ajax发送DELETE请求时后台无法接收到参数的问题(Restful风格)
- 解决layui的table数据重载reload where参数会保留上次条件的问题
- 终于弄懂了Layui表格重载数据
- 剑指Offer LeetCode 面试题21. 调整数组顺序使奇数位于偶数前面
- 剑指Offer LeetCode 面试题17. 打印从1到最大的n位数
- 剑指Offer LeetCode 面试题15. 二进制中1的个数
- 剑指Offer LeetCode 面试题11. 旋转数组的最小数字
- 剑指Offer 面试题09. 用两个栈实现队列
- 剑指Offer 面试题06. 从尾到头打印链表
- 剑指Offre 面试题05. 替换空格
- Datatables获取选中行的某一列的数据
- 终于懂了建造者模式