自定义NPM脚本(调用多个NPM脚本)不会因失败而停止

时间:2018-12-07 17:38:18

标签: node.js npm webpack

我正在创建一个自定义npm脚本,以提醒开发人员升级其节点版本。该脚本使用please-upgrade-node(基本上是他们的示例),并返回退出代码0:

#!/usr/bin/env node
var pkg = require('./package.json');
var pleaseUpgradeNode = require('please-upgrade-node');

pleaseUpgradeNode(pkg, {
  exitCode: 1,
  message: function(requiredVersion) {
    return ('ERROR!! This program requires Node version' +  requiredVersion');
  }
});

这是我在控制台中运行node please-upgrade-node时的输出:

ERROR!! This program requires Node version10.10.0

这是我的npm脚本:

"scripts": {
  "pun": "node please-upgrade-node",
  "build": "webpack",
  "dev": "webpack-dev-server --open",
  "start:dev": "npm run pun & npm run build & npm run dev"
}

问题是,当我运行npm run start:dev时,它将指出我需要使用较新版本的node,但是随后的脚本仍将在启动webpack开发服务器的过程中运行。

我认为NPM会取消整个start:dev脚本,但事实并非如此。以下是npm run start:dev之后的输出:

> companyInfoHere@0.0.1 start:dev /Users/companyInfoHere
> npm run pun & npm run build & npm run dev


> companyInfoHere@0.0.1 pun /Users/companyInfoHere
> node please-upgrade-node


> companyInfoHere@0.0.1 build /Users/companyInfoHere
> webpack


> companyInfoHere@0.0.1 dev /Users/companyInfoHere
> webpack-dev-server --open

ERROR!! This program requires Node version10.10.0
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! companyInfoHere@0.0.1 pun: `node please-upgrade-node`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the companyInfoHere@0.0.1 pun script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/companyInfoHere/.npm/_logs/2018-12-07T17_39_32_580Z-debug.log

clean-webpack-plugin: /Users/companyInfoHere/dist has been removed.
clean-webpack-plugin: /Users/companyInfoHere/dist has been removed.
ℹ 「wds」: Project is running at http://localhost:8081/
ℹ 「wds」: webpack output is served from /dist/js/
ℹ 「wdm」: wait until bundle finished: /dist/js/main.js
Hash: d84005de56ec80ce9d06
Version: webpack 4.27.1
Time: 2124ms
Built at: 12/07/2018 12:27:33 PM
        Asset      Size  Chunks             Chunk Names
      main.js   816 KiB    main  [emitted]  main
  main.js.map   944 KiB    main  [emitted]  main
manifest.json  76 bytes          [emitted]
Entrypoint main = main.js main.js.map
[./node_modules/webpack/buildin/global.js] (webpack)/buildin/global.js 472 bytes {main} [built]
[./src/index.tsx] 189 bytes {main} [built]
    + 13 hidden modules
ℹ 「wdm」: Hash: 2e79b1121cc06c02ad0d
Version: webpack 4.27.1
Time: 2576ms
Built at: 12/07/2018 12:27:34 PM
        Asset      Size  Chunks             Chunk Names
      main.js  1.11 MiB    main  [emitted]  main
  main.js.map  1.29 MiB    main  [emitted]  main
manifest.json  76 bytes          [emitted]
Entrypoint main = main.js main.js.map
[0] multi (webpack)-dev-server/client?http://localhost:8081 ./src/index.tsx 40 bytes {main} [built]
[./node_modules/ansi-html/index.js] 4.16 KiB {main} [built]
[./node_modules/ansi-regex/index.js] 135 bytes {main} [built]
[./node_modules/loglevel/lib/loglevel.js] 7.68 KiB {main} [built]
[./node_modules/react-dom/index.js] 1.33 KiB {main} [built]
[./node_modules/react/index.js] 190 bytes {main} [built]
[./node_modules/strip-ansi/index.js] 161 bytes {main} [built]
[./node_modules/url/url.js] 22.8 KiB {main} [built]
[./node_modules/webpack-dev-server/client/index.js?http://localhost:8081] (webpack)-dev-server/client?http://localhost:8081 7.78 KiB {main} [built]
[./node_modules/webpack-dev-server/client/overlay.js] (webpack)-dev-server/client/overlay.js 3.58 KiB {main} [built]
[./node_modules/webpack-dev-server/client/socket.js] (webpack)-dev-server/client/socket.js 1.05 KiB {main} [built]
[./node_modules/webpack/hot sync ^\.\/log$] (webpack)/hot sync nonrecursive ^\.\/log$ 170 bytes {main} [built]
[./node_modules/webpack/hot/emitter.js] (webpack)/hot/emitter.js 75 bytes {main} [built]
[./src/components/app.tsx] 203 bytes {main} [built]
[./src/index.tsx] 189 bytes {main} [built]
    + 24 hidden modules
ℹ 「wdm」: Compiled successfully.

我正在使用以下软件包:

please-upgrade-node

webpack

webpack-dev-server

编辑:在示例中添加了正确的退出代码并更改控制台响应

1 个答案:

答案 0 :(得分:0)

您希望使用双“&”号(&&)而不是单“&”号&

"scripts": {
  "pun": "node please-upgrade-node",
  "build": "webpack",
  "dev": "webpack-dev-server --open",
  "start:dev": "npm run pun && npm run build && npm run dev"
}

&表示在后台运行进程,而&&表示AND运算符,如果左手命令成功,它将运行右手命令。基本上就是您想要的。