在 linux 或 osx 上无法识别节点 bin 文件

Node bin file not being recognized on linux or osx

我一直在使用 Windows 中的 PyCharm 开发节点 cli 应用程序,它仅适用于 Windows,但总是 returns : No such file or directory从 Linux 变成 运行。我已经能够使用一个相当基本的示例作为测试来重现该问题。尝试安装每个版本并注意从 Windows 发布的版本如何在 Linux 或 OSX.

上无法 运行

发布于Windows:npm -g install cli-test@1.0.0 && cli-test

发布于Linux:npm -g install cli-test@2.0.0 && cli-test

package.json:

{
    "name": "cli-test",
    "version": "0.0.1",
    "bin": {
        "cli-test": "./cli.js"
    }
}

cli.js

#!/usr/bin/env node
console.log('hello world!');

如果我编写此代码,然后使用 Linux 上的项目目录中的 sudo npm -g install 安装它,然后 运行 cli-test 它会抛出上述错误。如果我从 windows 执行相同的操作,它会正确地控制台记录。

我可以通过以下步骤让它在 Linux 上运行:

  1. 打开项目目录Linux
  2. cli.js 重命名为 cli.old.js
  3. 创建一个名为 cli.js
  4. 的新文件
  5. 将旧文件的内容复制到新文件

当我从 Windows 发布到 npm 而不手动从 Linux 重新创建文件时,为什么它不会 运行 在 Linux 上?

Windows-based line endings 正在杀死你。完整的错误说,env: node\r: No such file or directory 因为 Windows 把 \r 放在那里(作为换行符的 \r\n 的一部分),但是 Linux 和 OSX 只使用 \ n 换行。

关于 NPM 的 github 问题以及几个可能的解决方法的讨论正在进行中:https://github.com/npm/npm/issues/2097