我正在尝试创建一个node.js命令行实用程序,并且遇到npm生成的包装器问题。我的超级简单演示是一个package.json文件:
{
"name": "demo-cli",
"version": "0.0.1",
"bin": { "demo": "bin/demo-cli.js" }
}
demo-cli.js文件:
console.log('DEMO WORKED');
问题是当我在项目目录中使用npm install -g
安装模块时,它生成的包装器不会以文件作为参数调用节点。这是demo.cmd的生成内容:
:: Created by npm, please don't edit manually.
"%~dp0\.\node_modules\demo-cli\bin\demo-cli.js" %*
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" %*
)
npm生成正确的脚本文件需要什么秘诀?我已经尝试了所有我能找到或想到的东西,包括删除.js扩展名,更喜欢全局,指定节点版本......没有运气。
我在Windows 7 x64上使用节点v0.6.18和npm v1.1.21。
答案 0 :(得分:7)
尝试放
#!/usr/bin/env node
位于demo-cli.js
文件的顶部。
在Windows上,npm
在创建.cmd
包装器时查找此shebang行。有关详细信息,请参阅npm
来源中的cmd-shim.js。