【问题标题】:Linux NodeJS global NPM package ":No such file or directory"Linux NodeJS 全局 NPM 包“:No such file or directory”
【发布时间】:2015-02-04 13:26:14
【问题描述】:

我正在使用 Ubuntu 14.04 并已安装 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

当我运行coffee(coffee-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 的机器能够运行此软件包,我遗漏了什么或遗漏了哪些配置?

完整的源代码参考:

【问题讨论】:

  • 如果你的编辑器插入回车,那么,你真的应该切换到一个真正的。或者找到改变行为的地方。
  • 确实,我显然应该换成真正的。 :-)

标签: javascript linux node.js npm


【解决方案1】:

问题是文件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

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

解决方案:使用$ 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

【讨论】:

  • 就是这样!默认情况下,Windows 机器将使用 \r\n 作为换行符。当您提交到 Git 时,一切都很好,因为 Git 设置通常会提交 Unix 样式的换行符。如果您发布到 npm,那么您将压缩并发送文件,从而获得 \r\n 发布。谢谢!
  • 从node给出的反馈来看这个太难理解了,谢谢你为我澄清了。
猜你喜欢
  • 2016-01-05
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2016-11-01
  • 2018-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多