2

我正在尝试创建一个 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。

4

1 回答 1

7

试着放

#!/usr/bin/env node

demo-cli.js文件的顶部。

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

于 2012-06-06T02:35:55.280 回答