Javascript Linux NodeJS全局NPM包“:没有这样的文件或目录;

Javascript Linux NodeJS全局NPM包“:没有这样的文件或目录;,javascript,linux,node.js,npm,Javascript,Linux,Node.js,Npm,我正在使用Ubuntu14.04,安装了nodejs和npm: sudo apt-get install nodejs npm 然后我创建了一个符号链接,使包能够使用节点解释器(而不是节点): 我安装了coffee脚本(用于测试目的)和我自己的软件包mangarack,带有: sudo npm -g install coffee-script mangarack 当我运行coffee(属于coffee脚本的一部分)时,该包将正常运行。如果我运行mangarack,我将获得: : No suc

我正在使用Ubuntu14.04,安装了
nodejs
npm

sudo apt-get install nodejs npm
然后我创建了一个符号链接,使包能够使用
节点
解释器(而不是
节点
):

我安装了
coffee脚本
(用于测试目的)和我自己的软件包
mangarack
,带有:

sudo npm -g install coffee-script mangarack
当我运行
coffee
(属于
coffee脚本的一部分)时,该包将正常运行。如果我运行
mangarack
,我将获得:

: No such file or directory.
我的
包.json中有以下内容:

"bin": {
  "mangarack": "./bin/mangarack"
},
该文件包含:

#!/usr/bin/env node

require('../lib/cli/index');
我查看了
coffee script
是如何完成的,似乎我的
require
语句是完全错误的,所以我用
console.log
语句替换了它,以查看文件是否会在
节点中实际运行。没有。我错过了什么或错过了配置以使基于Linux的机器运行此软件包

完整源代码参考:

  • npm:
  • 吉特:

问题在于文件
bin/mangarack
使用回车符,这在linux环境中会导致错误。看看我得到了什么:

$ mangarack --help
env: node\r: No such file or directory

$ head -n 1 `which mangarack` | hexdump
0000000 23 21 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 20 6e
0000010 6f 64 65 0d 0a
0000015
注意
节点
之后的字符
\r
0d
在十六进制模式下)。你应该移除它

解决方案:使用
$git config core.autocrlf
设置项目,然后提交更改。看

修复后的预期结果应为:

$ head -n 1 `which mangarack` | hexdump
0000000 23 21 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 20 6e
0000010 6f 64 65 0a
0000015

如果你的编辑器插入回车,那么,你真的应该切换到一个真实的回车。或者找到改变行为的地方。事实上,我显然应该换一个真正的行为。:-)就这样!默认情况下,Windows计算机将使用\r\n作为换行符。当您提交Git时,一切都很好,因为Git设置通常提交Unix风格的换行符。如果您发布到npm,则您正在压缩并发送文件,从而获得\r\n发布。谢谢这很难从node给出的反馈中理解,感谢您为我澄清。
$ head -n 1 `which mangarack` | hexdump
0000000 23 21 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 20 6e
0000010 6f 64 65 0a
0000015