Repository navigation
non-zero exit codes for npm run-script build? #252
Copy link
Copy link
Closed
Labels
Description
When I try to npm run-script build, if the process fails, I would expect it to return a non-zero exit code. Example:
john at Johns-MacBook-Pro-4 in ~/mysrc/weisjohn/scratch/test/hello-world
$ npm run-script build
> hello-world@0.0.1 build /Users/john/mysrc/weisjohn/scratch/test/hello-world
> react-scripts build
Failed to create a production build. Reason:
Module build failed: SyntaxError: /Users/john/mysrc/weisjohn/scratch/test/hello-world/src/App.js: Identifier directly after number (5:2)
3 | import './App.css';
4 |
> 5 | 10x;
| ^
6 |
7 | class App extends Component {
8 | render() {
at Parser.pp.raise (/Users/john/mysrc/weisjohn/scratch/test/hello-world/node_modules/react-scripts/node_modules/babylon/lib/parser/location.js:22:13)
at Parser.readNumber (/Users/john/mysrc/weisjohn/scratch/test/hello-world/node_modules/react-scripts/node_modules/babylon/lib/tokenizer/index.js:674:78)
at Parser.getTokenFromCode (/Users/john/mysrc/weisjohn/scratch/test/hello-world/node_modules/react-scripts/node_modules/babylon/lib/tokenizer/index.js:516:23)
at Parser.readToken (/Users/john/mysrc/weisjohn/scratch/test/hello-world/node_modules/react-scripts/node_modules/babylon/lib/tokenizer/index.js:180:21)
at Parser.<anonymous> (/Users/john/mysrc/weisjohn/scratch/test/hello-world/node_modules/react-scripts/node_modules/babylon/lib/plugins/jsx/index.js:51:20)
at Parser.readToken (/Users/john/mysrc/weisjohn/scratch/test/hello-world/node_modules/react-scripts/node_modules/babylon/lib/plugins/flow.js:170:22)
at Parser.nextToken (/Users/john/mysrc/weisjohn/scratch/test/hello-world/node_modules/react-scripts/node_modules/babylon/lib/tokenizer/index.js:169:21)
at Parser.next (/Users/john/mysrc/weisjohn/scratch/test/hello-world/node_modules/react-scripts/node_modules/babylon/lib/tokenizer/index.js:81:12)
at Parser.eat (/Users/john/mysrc/weisjohn/scratch/test/hello-world/node_modules/react-scripts/node_modules/babylon/lib/tokenizer/index.js:90:14)
at Parser.pp.isLineTerminator (/Users/john/mysrc/weisjohn/scratch/test/hello-world/node_modules/react-scripts/node_modules/babylon/lib/parser/util.js:69:15)
at Parser.pp.semicolon (/Users/john/mysrc/weisjohn/scratch/test/hello-world/node_modules/react-scripts/node_modules/babylon/lib/parser/util.js:76:13)
at Parser.pp.parseImport (/Users/john/mysrc/weisjohn/scratch/test/hello-world/node_modules/react-scripts/node_modules/babylon/lib/parser/statement.js:1011:8)
at Parser.pp.parseStatement (/Users/john/mysrc/weisjohn/scratch/test/hello-world/node_modules/react-scripts/node_modules/babylon/lib/parser/statement.js:141:56)
at Parser.parseStatement (/Users/john/mysrc/weisjohn/scratch/test/hello-world/node_modules/react-scripts/node_modules/babylon/lib/plugins/flow.js:30:22)
at Parser.pp.parseBlockBody (/Users/john/mysrc/weisjohn/scratch/test/hello-world/node_modules/react-scripts/node_modules/babylon/lib/parser/statement.js:529:21)
at Parser.pp.parseTopLevel (/Users/john/mysrc/weisjohn/scratch/test/hello-world/node_modules/react-scripts/node_modules/babylon/lib/parser/statement.js:36:8)
john at Johns-MacBook-Pro-4 in ~/mysrc/weisjohn/scratch/test/hello-world
$ echo $?
0
One of the reasons I want this is to utilize npm run-script build in a pre-commit hook as follows:
#!/bin/sh
# Exit at first failure
set -e
npm run-script buildReactions are currently unavailable
Activity
weisjohn commentedon Jul 28, 2016
Doing some more digging, if I invoke the script directly, then I do get the exit code:
vjeux commentedon Jul 28, 2016
Should be reported to npm :)
weisjohn commentedon Jul 28, 2016
@vjeux thanks, sorry
vjeux commentedon Jul 28, 2016
Oh I'm sorry, this is very educative, I had no idea that npm run didn't properly forward the return code. This is very unfortunate though and I don't think we can fix it :(
Return proper exit code in bin/react-scripts via spawnSync (react#252)
weisjohn commentedon Jul 28, 2016
Actually, I'm not sure this is npm's fault.
The default
npm run-script buildis configured to be"build": "react-scripts build",, which points toreact-scripts/bin/react-scripts.js:It looks like we're using the async version of
cross-spawn. And so, I think we need spawn sync, a la https://github.com/IndigoUnited/node-cross-spawn#usage and return results to our caller.If we use
cross-spawns sync method, that actually usesspawn-sync, which in turn is just a polyfill forchild_process.spawnSyncwhich returns the status code onresults.status.See PR: #254Return proper exit code in bin/react-scripts via spawnSync (react#252)
weisjohn commentedon Jul 28, 2016
Sorry about that, new PR: #256
vjeux commentedon Jul 28, 2016
Oh good catch!
Return proper exit code in bin/react-scripts via spawnSync (#252) (#256)
vjeux commentedon Jul 28, 2016
Thanks for the investigation and the quick fix! Correctly propagating error codes is hard!