NPM package 'bin' script for Windows
node.js, npm, package, posix, windows
Solution
Windows ignores the shebang line `#!/usr/bin/env node` and will execute it according to the `.js` file association. Be explicit about calling your script with node
node hello.js
ps. Pedantry: shebangs aren't in the POSIX standard but they are supported by most *nix system.
If you package your project for Npm, use the 'bin' field in package.json. Then on Windows, Npm will install a `.cmd` wrapper along side your script so users can execute it from the command-line
hello
For npm to create the shim right, the script must have the shebang line `#!/usr/bin/env node`
Problem
Cucumber.js is supplying a command-line "binary" which is a simple `.js` file containing a shebang instruction: ``` #!/usr/bin/env node var Cucumber = require('../lib/cucumber'); // ... ``` The binary is specified in `package.json` with the `"bin"` configuration key: ``` { "name" : "cucumber" , "description" : "The official JavaScript implementation of Cucumber." // ... , "bin": { "cucumber.js": "./bin/cucumber.js" } // ... ``` This all works well on POSIX systems. Someone reported an issue when running Cucumber.js on Windows. Basically, the `.js` file seems to be executed through the JScript interpreter of Windows (not Node.js) and it throws a syntax error because of the shebang instruction. My question is: what is the recommended way of setting up a "binary" script that works on both UNIX and Windows systems? Thanks.