Recently, I’ve lost quite a bit of time figuring why npm scripts would suddenly fail on Windows under Git bash if they tried to execute bash (e.g.,
"do-something": "bash ./do-something.sh").
I was executing the npm scripts from Git Bash as usual, so of course bash.exe was on my path but, it wasn’t found in the environment tied to the process for the script execution:
‘bash’ is not recognized as an internal or external command, operable program or batch file. npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! [email protected] clean-assets: `bash ./build.sh clean_assets` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the [email protected] clean-assets script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
To my surprise, after digging for a while, I’ve realized that the script was executed under cmd.exe.
Apparently, since npm 5, we can select the shell to use by defining the “script-shell” setting in the npm config:
npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"
After setting this, my problem was directly fixed.
Hope this helps! :)
For reference, I found this related SO question: https://stackoverflow.com/questions/23243353/how-to-set-shell-for-npm-run-scripts-in-windows
That's it for today! ✨
Hello everyone! I'm Sébastien Dubois. I'm an author, founder, and CTO. I write books and articles about software development & IT, personal knowledge management, personal organization, and productivity. I also craft lovely digital products 🚀
If you've enjoyed this article and want to read more like this, then become a subscriber, check out my Obsidian Starter Kit, the PKM Library and my collection of books about software development 🔥.
You can follow me on Twitter 🐦
If you want to discuss, then don't hesitate to join the Personal Knowledge Management community or the Software Crafters community.