How to execute 'npm run' command programmatically?
我有一些自定义测试脚本,可以使用npm run test命令运行该命令,该命令执行一些Node脚本以启动e2e /单元测试。 但是在此之前,我必须在其他终端窗口中使用npm run dev(也是一些自定义Node脚本,细节无关紧要)启动webpack开发服务器。 因此,我想省略手动执行的npm run dev并将其移到自定义的npm run test脚本中,即我想在Node脚本中以编程方式执行webpack开发服务器。 如何使用Node脚本以编程方式执行npm run dev并随后将其停止? 提前致谢!
1
| "dev":"node node_modules/webpack-dev-server/bin/webpack-dev-server.js --host 0.0.0.0 --history-api-fallback --debug --inline --progress --config config/config.js" |
-
为什么不创建运行其他两个脚本的npm start? 像"start":"npm run dev & npm run test"
-
@elclanrs npm run test不应在npm run dev之前开始
-
为什么不以编程方式运行webpack-dev-server?
-
@robertklep-一个很好的建议,虐待尝试
-
@malcoauri如果无法解决问题,请查看此答案,它说明了如何以编程方式运行NPM。
-
这回答了你的问题了吗? 使用Node.js执行命令行二进制文件
您可以使用exec从脚本运行
1 2 3 4 5 6 7
| import {series} from 'async';
const {exec} = require('child_process');
series([
exec('npm run dev'),
exec('npm run test')
]); |
-
错误:需要一个函数,并且UnhandledPromiseRejectionWarning:未处理的承诺被拒绝。
-
UnhandledPromiseRejectionWarning错误是因为系列参数需要一个函数数组。因此,您可以通过执行series([ () => exec(npm run dev), () => exec(npm run test) ]); 来解决此错误
只需安装npm:
然后在您的程序中:
1
| npm.command.run('dev', (err) => { ... }); |
请参阅源以获取更多信息。 npm.command对象是npm的非官方API。
-
尽管@ foysal-osmanys回答有很多优点。参见stackoverflow.com/questions/15957529/
-
那很棒!我不知道您可以使用NPM作为模块。 JavaScript API文档在哪里?
-
我还没有找到任何文档。我的答案基于来自各地的代码示例。
-
另请注意,我同意使用exec更安全。我直接使用npm模块的原因是为了避免增加第二个node.js运行时。
-
@Xunnamius,不,这不是正确的答案。请参考您自己的链接。出于多种原因,将npm称为模块是不安全的。
-
@JulianKnight你是对的。尽管我不记得自己的用例,但我相信我改用了exec。尽管我很好奇您所说的"不安全"和"几个原因"是什么意思?您是指大小和不稳定的API吗?
-
API不稳定以及npm / node.js的特定版本之间以前存在问题的事实
-
如上所述,该API是内部的,除非您准备好应对突如其来的重大更改,否则不安全使用。我这样做是为了避免有两个单独的Node.js运行时,它对我有用。
使用PM2,它确实非常有用且容易...
1 2 3 4 5 6 7 8 9
| const pm2 = require('pm2');
pm2.start({
script: 'npm -- run monitorTheWeather',
autorestart : false
}, (err, apps) => {
pm2.disconnect()
if (err) { throw err }
}) |