我用MacOS开发,这个npm的scripts是可以很好的执行并行或者串行的脚本的,比如我们来看下我这个在MacOS下的正常执行的scripts代码段:
"scripts": { "dev": "webpack --watch --config webpack.dev.js & npm run s", "build": "webpack --config webpack.prod.js", "prod": "webpack --config webpack.prod.js & npm run s", "lint": "eslint --ext ./src/*.js", "lintfix": "eslint --fix ./src/*.js", "sa": "nodemon ./servers/51la/server.js", "sb": "nodemon ./servers/jump/server.js", "sc": "nodemon ./server.js", "s": "npm run sa & npm run sb & npm run sc" },
这里我执行npm run dev
可以并行处理webpack --watch --config webpack.dev.js
和npm run s
,而执行后面的这个名领的时候又可以触发执行npm run sa & npm run sb & npm run sc
,然后再次触发对应的三个命令。我暂时不关心他多层调用的问题。
重点:其他人用Windows就完蛋了
怎么个完蛋法,Windows下不支持该方式,执行了webpack --watch --config webpack.dev.js
就停止了,为了解决跨平台兼容问题。我也是找了几个相关的解决方案,比如npm-run-all
、Concurrently
、parallelshell
、cross-env
等等,不过综合测试总结了一下,concurrently还是很方便的。于是使用这个工具,调整了scripts就解决了问题:
"scripts": { "dev": "concurrently \"webpack --watch --config webpack.dev.js\" \"npm:s-*\"", "build": "webpack --config webpack.prod.js", "prod": "webpack --config webpack.prod.js & npm run s", "lint": "eslint --ext ./src/*.js", "lintfix": "eslint --fix ./src/*.js", "s-a": "nodemon ./servers/51la/server.js", "s-b": "nodemon ./servers/jump/server.js", "s-c": "nodemon ./server.js", "s": "npm run sa & npm run sb & npm run sc", }
这样就解决了,但是如果遇到串行,也就是按顺序执行(MacOS下只需要将&
换成&&
即可),貌似又无法解决?所以这块在跨平台的处理上可能还要看看有没有办法。
相关阅读:
- How can I run multiple npm scripts in parallel?
- 4 Solutions To Run Multiple Node.js or NPM Commands Simultaneously