npm的scripts脚本
npm中的package.json中可以通过scripts字段来实现脚本。
原理
npm使用npm run
去执行脚本,会启动一个shell,可以通过shell命令运行脚本。
当使用npm run命令的时候会将当前目录的node_modules/.bin
子目录加入PATH
变量,执行结束后,再将PATH变量恢复原样。
比如使用jest test来做对比:
1 | "test": "jest test" |
这就相当于
1 | "test": "./node_modules/.bin/jest test" |
通配符
*
表示任意文件名,**
表示任意一层子目录。
例子:
1 | "lint": "jshint *.js" |
如果要将通配符传入原始命令,防止被 Shell 转义,要将星号转义。
1 | "test": "tap test/\*.js" |
传参
使用环境变量来代替
1 | "scripts": { |
在app.js文件中获取PORT的值
1 | console.log(process.env.PORT) |
打印结果:3000
可以通过config配置项来定义变量获取
例子:
1 | "scripts": { |
app.js中获取myPort的变量
1 | console.log(process.env.npm_package_config_myPort) |
打印结果:5000
package.json中的配置项都可以通过process.env.npm_package_
后面是配置项名字来获取到。
如:
1 | // package.json文件 |
想要获取name就需要用process.env.npm_package_name
,注意获取配置项一定要精确到最后,否则无法获取,比如无法获取scripts配置项中的所有数据,想要获取数据,要具体一点才行,如:process.env.npm_package_scripts_test
才能获取到数据,而不是process.env.npm_package_scripts
,这样的话获取到的结果是undefined
。
用命令去修改配置项的值
使用命令去修改package.json中的数据,如:
1 | "name": "npmTest", |
使用npm config set npmTest:myPort 4000
来改变config配置项中的myPort的值。
这样在app.js中使用
1 | console.log(process.env.npm_package_config_myPort) |
打印结果为:4000
注意:npm config set 后面是package.json的name的值冒号加上要改的字段
执行顺序
想要执行多个任务,需要使用&
或者&&
来进行操作。&
来连接多个任务,表示多个任务异步执行。如:
1 | "scripts": { |
node app.js
和node app1.js
会异步执行,具体谁先执行完是未知的。
&&
来连接多个任务,表示多个任务同步执行(即只有前一个任务成功,才执行下一个任务)。如:
1 | "scripts": { |
只有node app.js
执行完成后才会开始执行node app1.js
参考自:npm scripts 使用指南
-
2021-09-14
-
2020-07-10
-
2023-05-12
-
2022-03-21
-
2020-05-28