前端工程化实现并发执行的解决方案
做工程化前端开发过程中,我们经常会遇到需要同时执行多个命令的情况。例如,我们可能需要同时运行多个监听程序,以便在文件发生更改时自动编译和更新输出。
那么如何进行多个前端任务的并发执行呢?
下面有几种方法可以实现:
语法如下:
使用连接符
命令连接符有&&
、&
、||
、|
四种类型,意义如下:
符号 | 说明 |
---|---|
&& | 顺序执行多条命令,当碰到执行出错的命令后将不执行后面的命令 |
& | 并行执行多条命令 |
|| | 顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令 |
| | 管道符 |
例如,我们定义了两个脚本文件,分别是app.js
和app2.js
,在两个脚本文件中分别定义两个定时器,延时输出一段文字。
app.js
1 | setTimeout(() => { |
app2.js
1 | setTimeout(() => { |
然后在package.json
中定义脚本命令如下:
1 | "scripts": { |
那么我们执行npm run test
命令,将会顺序执行两个脚本文件,输出结果如下:
1 | $ npm run test |
我们将命令改成node app.js & node app2.js
,将会并行执行两个脚本文件,输出结果如下:
1 | "scripts": { |
那么我们再执行npm run test
命令时,输出结果变成如下:
1 | $ npm run test |
可以看到,两个脚本文件的输出顺序发生了变化,这是因为&
符号会在后台异步运行node app2.js
命令,所以node app2.js
命令会先执行。
使用npm-run-all
使用 npm-run-all
模块,也可以同时运行多个npm脚本。
首先,我们需要安装 npm-run-all
模块:
1 | npm install npm-run-all |
然后在 package.json 中:
1 | "scripts": { |
运行 npm run test
即可同时执行 app:1 和 app:2,输出结果为
1 | $ npm run test |
使用 concurrently
concurrently
和npm-run-all
类似,也是解决前端工程化开发时,处理多任务并行的解决方案之一。
安装
1 | npm install concurrently |
concurrently
的基础配置格式如下:
1 | "scripts": { |
这里要注意,concurrently
命令中的命令需要用双引号包裹,并且转义,切不可使用单引号,否则会报错。
运行npm run test
,输出结果如下:
1 | $ npm run test |
关于concurrently
的更多用法,可以参考我的另一边文章前端工程化多任务并发利器-concurrently。