的Linux的NodeJS全球NPM包“:没有这样的文件或目录”

问题描述:

我使用Ubuntu 14.04和已安装nodejsnpm有:的Linux的NodeJS全球NPM包“:没有这样的文件或目录”

sudo apt-get install nodejs npm 

然后我做了一个符号链接,使包装使用node解释(而不是nodejs):

sudo ln -s /usr/bin/nodejs /usr/local/bin/node 

我安装coffee-script(用于测试目的)和我自己的包,mangarack,具有:

sudo npm -g install coffee-script mangarack 

当我运行coffeecoffee-script的一部分)时,该软件包将运行正常。如果我运行mangarack,我将获得:

: No such file or directory. 

我在package.json如下:

"bin": { 
    "mangarack": "./bin/mangarack" 
}, 

而且该文件包含:

#!/usr/bin/env node 

require('../lib/cli/index'); 

我看着怎么coffee-script做到了似乎我的require声明是绝对错误的,所以我用console.log声明替换了该声明以查看该文件是否会通常在node运行。它没有。我错过或错过了什么 - 配置以启用基于Linux的机器来运行此软件包?

完整的源代码引用:

+1

如果你的编辑器插入回车,好了,你真的应该切换到一个真实的。或者找到改变行为的地方。 – 2014-12-06 14:16:18

+0

事实上,我显然应该切换到真正的。 :-) – 2014-12-06 17:42:11

的问题是文件bin/mangarack使用回车,这会导致错误在Linux环境。看我得到了什么:node

$ 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 

通知(十六进制模式0d)字\r。你应该删除它。

解决方案:使用$ git config core.autocrlf设置您的项目,然后再提交更改。看到https://help.github.com/articles/dealing-with-line-endings/

预期的结果后,修复应该是:

$ 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 
+2

就是这样!默认情况下,Windows机器将使用\ r \ n作为换行符。当你提交Git时,因为通常提交Unix样式换行符的Git设置,所以这一切都很好。如果你发布到npm,那么你正在压缩并发送文件,从而得到\ r \ n发布。谢谢! – 2014-12-06 17:43:29

+0

这很难从节点给出的反馈中理解,谢谢澄清它给我。 – moodboom 2015-11-22 18:48:48