我不确定我是否完全理解您的要求,所以我将提供一些可能的解决方案。
您可能希望按顺序运行任务(下面的第一个解决方案),但是在您的帖子中您提到了并行。
1。按顺序运行任务
npm-scripts 支持&& 运算符,该运算符通常用于 bash shell。但是,npm-scripts 中使用的 && 运算符确实可以跨平台成功运行。
使用&& 运算符链接任务的伪示例:
"scripts": {
"foo": "npm run task1 && npm run task2 && npm run task3"
},
使用上面的示例通过 CLI 运行 $ npm run foo...
- 最初运行
task1。
- 当
task1 成功完成(即task1 以零状态退出) 然后task2 将运行。
-
task2 成功完成后,task3 将运行。
如果&& 运算符的左侧由于某种原因失败,(即以非零代码/状态退出),右侧的后续任务将失败跑步。例如;如果task1 失败,则task2 和task3 将不会运行。
2。同时运行任务
npm-scripts 还支持单个& 运算符跨平台同时运行任务。
使用& 运算符的伪示例:
"scripts": {
"foo": "npm run task1 & npm run task2 & npm run task3"
},
在此示例中,双 && 和单 & 运算符之间的主要区别在于,如果单 & 的左侧失败,则无论如何都会运行右侧。例如;如果task1 失败,则task2 仍然运行。
3。并行运行任务。
要并行运行任务,我建议您使用parallelshell:
$ npm i -D parallelshell
使用parallelshell的伪示例:
"scripts": {
"foo": "parallelshell \"npm run task1\" \"npm run task2\" \"npm run task3\""
},
此示例最初看起来与使用上一节中显示的单个 & 运算符非常相似,但是它提供了 documentation 中列出的其他好处。 (IMO) 的主要好处是:
如果 command1 或 command2 以非零退出代码退出,那么这不会影响你的 shell 的结果(即它们可能会失败并且 npm/bash/whatever 会忽略它)。 parallelshell 不会忽略它,并会以第一个非零退出代码退出。
4。并行和顺序运行任务。
假设您想并行/同时运行task1 和task2,然后仅在task1 和task2 都成功完成后运行task3。
要实现这一点,您可以同时使用parallelshell 和内置 && 运算符。
使用parallelshell 和&& 运算符链接任务的伪示例:
"scripts": {
"foo": "parallelshell \"npm run task1\" \"npm run task2\" && npm run task3"
},
编辑
基于以下 OP 的更新/编辑的解决方案:
另一个例子:我的第一个任务可能是启动 webdriver-manager,我的第二个任务是启动一个网络服务器,而我的第三个任务是在我的文件更改时运行 e2e 测试。所以,我需要所有这些任务保持并发运行,但它们需要按照特定的顺序和时间进行初始化。
5。同时运行任务。
concurrently 可用于并发运行任务:
$ npm i -D concurrently
使用concurrently的伪示例:
"scripts": {
"foo": "concurrently \"npm run task1\" \"npm run task2\" \"npm run task3\""
},
此示例将保持所有任务(1,2 和 3)同时运行,并且它们将按指定的顺序启动。我不知道您的示例用例中提到的工具的足够详细信息,但是可以根据需要组合本文中提供的所有示例以满足您的确切要求。
concurrently 也有几个有用的options。