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

Roe*_*den 4 javascript linux node.js npm

我正在使用Ubuntu 14.04并已安装nodejsnpm使用:

sudo apt-get install nodejs npm
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个符号链接,使包能够使用node解释器(而不是nodejs):

sudo ln -s /usr/bin/nodejs /usr/local/bin/node
Run Code Online (Sandbox Code Playgroud)

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

sudo npm -g install coffee-script mangarack
Run Code Online (Sandbox Code Playgroud)

当我运行coffee(部分coffee-script)时,该包运行正常.如果我跑mangarack,我会得到:

: No such file or directory.
Run Code Online (Sandbox Code Playgroud)

我有以下内容package.json:

"bin": {
  "mangarack": "./bin/mangarack"
},
Run Code Online (Sandbox Code Playgroud)

该文件包含:

#!/usr/bin/env node

require('../lib/cli/index');
Run Code Online (Sandbox Code Playgroud)

我看了coffee-script它是怎么做的,看起来我的require语句是绝对错误的,所以我用一个console.log语句替换它,看看文件是否实际运行node.它没有.我错过或错过配置什么来启用基于Linux的计算机来运行此程序包?

完整源代码参考:

sha*_*zhu 10

问题是文件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
Run Code Online (Sandbox Code Playgroud)

注意后面的字符\r(0d以十六进制模式)node.你应该删除它.

解决方案:设置项目,$ 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
Run Code Online (Sandbox Code Playgroud)

  • 而已!默认情况下,Windows计算机将使用\ r \n作为换行符.当你提交Git时,由于Git设置通常会提交Unix样式的换行符,所以它都很好用.如果您发布到npm,那么您正在拉链并发送文件,从而得到\ r \n发布.谢谢! (2认同)