NPM script under cygwin/windows: the syntax of the

2019-01-28 07:55发布

问题:

I am running Node 6.9.5 and NPM 3.10.10 on a Windows 7 machine. My terminal is Cygwin 2.877.

If I try to run the following in Cygwin, it works fine:

mkdir mydir/mysubdir;

However, if I put it into a package.json file instead, e.g.:

"scripts": {
 "test": "mkdir mydir/mysubdir"
},

and run:

npm run test

It fails with:

The syntax of the command is incorrect.

After Googling the above, it seems to be a Windows Command Prompt error, not a Cygwin one. As such, it seems that NPM is trying to run the script using the Command Prompt rather than the existing Cygwin environment.

How can I fix this? Or rather, how can I make sure NPM runs scripts in the terminal environment it is being invoked from?

回答1:

The script are always run in the default windows shell, not cygwin.

If you want it to run in bash then put this in package.json:

"scripts": {
    "test": "bash test.sh"
},

and put this in test.sh:

#!/bin/bash
mkdir mydir/mysubdir

Or, as csvan pointed out in the comment, you can use Node scripts instead of shell scripts:

"scripts": {
    "test": "node test.js"
},

This approach is even better for cross-platform compatibility.

See also:

  • Why does `DEBUG=foo node index.js` fails in `scripts` section of `package.json`