Error when executing scripts with pipes in parallel
I'm using npm-run-all for scripts that build SCSS and JS (transpiling, bundling, compressing, ...). This works quite well, but when I try to execute these scripts in parallel, I occasionally run into errors.
I stripped it down and put it in a repository: https://github.com/nesmyslny/npm-script-issue
These are the scripts in package.json:
// [...]
"scripts": {
"build-p": "npm-run-all -pnl build:**",
"build-s": "npm-run-all -snl build:**",
"build:css": "node-sass in.scss | postcss --use autoprefixer -o out.css",
"build:js": "browserify in.js -o out.js -t [ babelify --presets [ latest ] ]",
"build:min:css": "node-sass in.scss --output-style compressed | postcss --use autoprefixer -o out.min.css",
"build:min:js": "browserify in.js -t [ babelify --presets [ latest ] ] | uglifyjs -c > out.min.js"
}
// [...]
Executing them sequentially works (npm run build-s). But in parallel (npm run build-p) I get, for example, that output:
[build:css ]
[build:css ] > @ build:css /home/user/tmp/npm-script-issue/package.json
[build:css ] > node-sass in.scss | postcss --use autoprefixer -o out.css
[build:css ]
[build:js ]
[build:js ] > @ build:js /home/user/tmp/npm-script-issue/package.json
[build:js ] > browserify in.js -o out.js -t [ babelify --presets [ latest ] ]
[build:js ]
[build:min:css]
[build:min:css] > @ build:min:css /home/user/tmp/npm-script-issue/package.json
[build:min:css] > node-sass in.scss --output-style compressed | postcss --use autoprefixer -o out.min.css
[build:min:css]
[build:min:js ]
[build:min:js ] > @ build:min:js /home/user/tmp/npm-script-issue/package.json
[build:min:js ] > browserify in.js -t [ babelify --presets [ latest ] ] | uglifyjs -c > out.min.js
[build:min:js ]
[build:js ]
[build:js ] > @ build:js /home/user/tmp/npm-script-issue
[build:js ] > browserify in.js -o out.js -t [ babelify --presets [ latest ] ]
[build:js ]
[build:css ]
[build:css ] > @ build:css /home/user/tmp/npm-script-issue
[build:css ] > node-sass in.scss | postcss --use autoprefixer -o out.css
[build:css ]
[build:min:css]
[build:min:css] > @ build:min:css /home/user/tmp/npm-script-issue
[build:min:css] > node-sass in.scss --output-style compressed | postcss --use autoprefixer -o out.min.css
[build:min:css]
[build:min:js ]
[build:min:js ] > @ build:min:js /home/user/tmp/npm-script-issue
[build:min:js ] > browserify in.js -t [ babelify --presets [ latest ] ] | uglifyjs -c > out.min.js
[build:min:js ]
[build:css ] events.js:182
[build:css ] throw er; // Unhandled 'error' event
[build:css ] ^
[build:css ]
[build:css ] Error: EAGAIN: resource temporarily unavailable, write
[build:css ] ✖ Processing stdin
[build:css ]
[build:css ]
[build:css ] ✖ Syntax Error: stdin
[build:css ]
[build:css ] [2952:3] Unclosed block
[build:css ]
[build:css ] 2950 | background-color: #31b0d5;
[build:css ] 2951 | border-color: #269abc; }
[build:css ] > 2952 | .btn-info:active, .btn-info.active,
[build:css ] | ^
[build:css ] 2953 | .open > .btn-info.dropdown-toggle {
[build:css ] 2954 | color: #fff;
[build:css ]
[build:css ]
[build:css ] npm ERR! code ELIFECYCLE
[build:css ] npm ERR! errno 1
[build:css ] npm ERR! @ build:css: `node-sass in.scss | postcss --use autoprefixer -o out.css`
[build:css ] npm ERR! Exit status 1
[build:css ] npm ERR!
[build:css ] npm ERR! Failed at the @ build:css script.
[build:css ] npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
[build:css ]
[build:css ] npm ERR! A complete log of this run can be found in:
[build:css ] npm ERR! /home/user/.npm/_logs/2017-06-12T18_48_34_075Z-debug.log
ERROR: "build:css" exited with 1.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! @ build-p: `npm-run-all -pnl build:**`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the @ build-p 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! /home/user/.npm/_logs/2017-06-12T18_48_34_200Z-debug.log
Sometimes it works, so maybe it's even related to the performance of the machine, etc.
It doesn't make a different if I use npm or yarn; same behavior.
Can piping and/or redirection be a problem, when executing in parallel? Did I miss a limitation?
I would be grateful of for any hint :smiley:
I apology that I have overlooked the notification of this issue.
Thank you for the report. Interesting. I have not been aware of the limitation about this issue. The error message "Error: EAGAIN: resource temporarily unavailable, write\n✖ Processing stdin" indicates there is the problem around the piping in the script`. I need to investigate more.
I'm getting this as well but I'm not using npm-run-all, I think the issue might lie with node-sass but I'm not sure what exactly is throwing the error.
Edit: Oh actually, maybe not according to this comment https://github.com/sass/node-sass/issues/2075#issuecomment-324344654