乐趣区

npm的scripts在Windows下无法并行或串行执行多命令的解决

我用 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.jsnpm run s,而执行后面的这个名领的时候又可以触发执行npm run sa & npm run sb & npm run sc,然后再次触发对应的三个命令。我暂时不关心他多层调用的问题。

重点:其他人用 Windows 就完蛋了

怎么个完蛋法,Windows 下不支持该方式,执行了 webpack --watch --config webpack.dev.js 就停止了,为了解决跨平台兼容问题。我也是找了几个相关的解决方案,比如 npm-run-allConcurrentlyparallelshellcross-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
退出移动版