在npm中,如何运行两个或多个并行任务,但等待第一个任务将创建的资源可供第二个任务使用,等等?
示例(概念):
npm run task1 & waitfor task1 then task2 & waitFor task3 then task4 ...
字符串
有什么想法吗?
编辑
例如:假设我的第一个任务是启动一个web服务器,第二个任务是在每次事件发生时从该web服务器消耗数据。另一个例子:我的第一个任务可能是启动webdriver-manager,第二个任务是启动一个web服务器,第三个任务是在每次文件更改时运行e2 e测试。所以,我需要所有这些任务都同时运行,但是它们需要以特定的顺序和时间被初始化。
3条答案
按热度按时间8tntrjer1#
您可以尝试concurrently与wait-on软件包,以管理conccurent/顺序脚本和输出。等待顺序启动支持头响应状态,tcp侦听,.
举例来说:
字符串
感谢dchambers的想法(来源)。
wwodge7n2#
我不确定我完全理解你的要求,所以我会提供一些可能的解决方案。
1.按顺序运行任务
npm-scripts
支持通常在bash shell中使用的&&
操作符。然而,npm-scripts
中使用的&&
操作符可以成功地跨平台工作。使用
&&
运算符链接任务的伪示例:字符串
使用上面的示例通过CLI运行
$ npm run foo
.1.最初运行
task1
。1.当
task1
成功完成 (即task1
以零状态退出) 时,task2
将运行。1.当
task2
成功完成时,task3
将运行。如果
&&
操作符的左侧由于任何原因失败,(即它以非零代码/状态退出),则右侧的后续任务将无法运行。例如;如果task1
失败,则task2
和task3
将不会运行。2.任务同时运行
npm-scripts
还支持单个&
操作员跨平台同时运行任务。使用
&
运算符的伪示例:型
在这个例子中,double
&&
和single&
运算符之间的主要区别是,如果single&
的左边失败,那么右边会运行。例如,如果task1
失败,那么task2
仍然运行。3.并行运行任务。
要并行运行任务,我建议您使用parallelshell:
$ npm i -D parallelshell
parallelshell
伪示例:型
这个例子最初看起来非常类似于使用上一节中显示的单个
&
运算符,但是它提供了文档中列出的其他好处。主要好处 (IMO) 是:如果command 1或command 2以非零退出代码退出,那么这不会影响shell的结果(即它们可能会失败,npm/bash/whatever将忽略它)。
4.并行和顺序运行任务。
假设您希望并行/同时运行
task1
和task2
,然后仅在task1
和task2
都成功完成时才运行task3
。要实现这一点,您可以使用
parallelshell
和 * 内置 *&&
操作符。使用
parallelshell
和&&
运算符链接任务的伪示例:型
编辑
基于以下OP的更新/编辑的解决方案:
另一个例子:我的第一个任务可能是启动webdriver-manager,第二个任务是启动一个web服务器,第三个任务是每次文件被更改时运行e2 e测试。所以,我需要所有这些任务同时运行,但它们需要以特定的顺序和时间进行初始化。
5.并发运行任务。
concurrently可用于并发运行任务:
$ npm i -D concurrently
concurrently
伪示例:型
这个例子将保持所有任务 (1,2,3) 并发运行,它们将按照指定的顺序开始。我不知道你的例子用例中提到的工具的足够细节,但是这篇文章中提供的所有例子都可以根据需要组合起来以满足你的确切要求。
concurrently
也有一些有用的选项。vsdwdz233#
使用
npm-run-all
:https://github.com/mysticatea/npm-run-all/blob/HEAD/docs/npm-run-all.md#run-a-mix-of-sequential-and-parallel-scripts$ npm-run-all clean lint --parallel watch:html watch:js
首先,这将连续/串行地运行干净和lint。
接下来,并行运行watch:html和watch:js。
$npm-运行-所有a B --并行c d --顺序e f --并行g h i
或
$npm-运行-所有a B --并行c d --串行e f --并行g h i
首先,顺序/串行运行a和B。
第二,并行运行c和d。
第三,顺序/串行运行e和f。
最后,并行运行g、h和i。