npm-generated命令不调用节点

Joh*_*ton 2 node.js npm

我正在尝试创建一个node.js命令行实用程序,并且遇到npm生成的包装器问题.我的超级简单演示是一个package.json文件:

{
    "name": "demo-cli",
    "version": "0.0.1",
    "bin": { "demo": "bin/demo-cli.js" }
}
Run Code Online (Sandbox Code Playgroud)

和demo-cli.js文件:

console.log('DEMO WORKED');
Run Code Online (Sandbox Code Playgroud)

问题是当我npm install -g在项目目录中使用while 安装模块时,它生成的包装器不会以文件作为参数调用节点.这是demo.cmd的生成内容:

:: Created by npm, please don't edit manually.
"%~dp0\.\node_modules\demo-cli\bin\demo-cli.js"   %*
Run Code Online (Sandbox Code Playgroud)

unix版本有同样的问题.查看另一个全局安装的CLI,我可以看到该节点正在按预期进行测试和调用.

:: Created by npm, please don't edit manually.
@IF EXIST "%~dp0\node.exe" (
  "%~dp0\node.exe"  "%~dp0\.\node_modules\mocha\bin\mocha" %*
) ELSE (
  node  "%~dp0\.\node_modules\mocha\bin\mocha" %*
)
Run Code Online (Sandbox Code Playgroud)

npm生成正确脚本文件所需的秘诀是什么?我已经尝试了所有我能找到或想到的东西,包括删除.js扩展名,更喜欢全局,指定节点版本......没有运气.

我在Windows 7 x64上使用节点v0.6.18和npm v1.1.21.

jim*_*imr 7

试试看

#!/usr/bin/env node
Run Code Online (Sandbox Code Playgroud)

demo-cli.js文件的顶部.

在Windows上,npm在创建.cmd包装器时查找这个shebang行.有关详细信息,请参阅源代码中的cmd-shim.jsnpm.