为什么全局NPM批处理文件的格式与常见的全局包不同?

时间:2015-05-20 21:13:06

标签: node.js npm

我正在尝试运行本地创建的包的全局安装。

npm install -g myModule

在大多数情况下似乎都有效。

我在dir中看到了我期望的文件:Users\me\AppData\Roaming\npm\(Windows)

我看到批处理文件 cmd 文件。

但两者都有如下代码: "$basedir/node_modules/myModule/main.js" "$@" exit $?

我环顾dir,看到 Mocha,Bower,Grunt 有类似的东西:

 #!/bin/sh
 basedir=`dirname "$0"`

case `uname` in
   *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac

if [ -x "$basedir/node" ]; then
  "$basedir/node"  "$basedir/node_modules/bower/bin/bower" "$@"
  ret=$?
else 
  node  "$basedir/node_modules/bower/bin/bower" "$@"
 ret=$? fi exit $ret

如果我将文件更改为具有此格式(并调整路径),我会得到预期的行为(可以从命令行运行myModule)....

否则我收到错误:... No such file or directory

1 个答案:

答案 0 :(得分:0)

所以事实证明这是设计的。 我通过以下方式解决了这个问题

  1. 使用#!/usr/bin/env node启动我的入口点文件 并删除文件上的.js扩展名。

  2. package.json上的bin设置为该文件:

     "bin": {
         "myModule": "bin/myModule"
     }