【问题标题】:Sublime Text CoffeeScript build system: `env: node: No such file or directory`Sublime Text CoffeeScript 构建系统:`env:node:没有这样的文件或目录`
【发布时间】:2013-12-02 09:56:46
【问题描述】:

我正在尝试在 Sublime Text 3 中设置 CoffeeScript 构建系统,但我不断收到以下错误:

env: node: No such file or directory
[Finished in 0.0s with exit code 127]
[cmd: ['coffee', '-o','/Users/jcourtdemone/Sites/autotempest.com/new_design_sandbox/static/script', '-cw', '/Users/jcourtdemone/Sites/autotempest.com/new_design_sandbox/static/coffee']]
[dir: /Users/jcourtdemone/Sites/autotempest.com/new_design_sandbox/static/coffee]
[path: /usr/bin:/bin:/usr/sbin:/sbin]

我的构建系统如下所示:

{
    "name": "Coffee - AT",
    "cmd": ["coffee","-o","${project_path:${folder}}/static/script","-cw","${project_path:${folder}}/static/coffee"],
    "selector": "source.coffee",
    "path":"/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/lib/node_modules/coffee-script/bin"
}

这有两点奇怪。

1) 它说它正在寻找/usr/bin,其中存在指向coffee 的符号链接。

2) 由于 (1),我覆盖了 $PATH 以包含 coffee 的实际位置,即 /usr/local/lib/node_modules/coffee-script/bin,但由于某种原因,$PATH 没有被正确覆盖,它坚持使用默认$PATH

注意事项:

i) 我已经验证了所有路径都是正确的,并且可以通过常规终端命令正常传递。

ii) 尝试在构建系统中使用 "shell": true 变量。

iii) 我有另一个类似这样的 Compass 构建系统。

有人遇到过类似的问题吗?有什么想法吗?

【问题讨论】:

    标签: coffeescript build-automation sublimetext sublimetext3


    【解决方案1】:

    在终端中,输入which node,然后在/usr/bin 中创建指向该位置的符号链接。例如,如果 node 位于 /usr/local/bin 中,则像这样创建符号链接:

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

    如果您查看coffee 脚本的源代码,您可能会发现第一行类似于:

    #!/usr/bin/env node
    

    Sublime 中的退出代码 127 意味着 env 命令失败 - 所以在您的情况下,构建系统正在查找 coffee,但它无法执行它,因为 node 二进制文件不在 Sublime 中默认搜索路径。

    有两种方法可以重新定义 Sublime 的默认搜索路径。第一个(也是最简单的)是始终使用内置的subl 命令从命令行打开它。如果您是 OS X 高级用户并且不介意弄乱重要的系统设置,请查看 unix.SE 上的 my post,了解如何更改您看到的默认 /usr/bin:/bin:/usr/sbin:/sbin 路径。预先警告,如果你做的事情不正确,你可能会破坏你的系统。但是,如果您运行的是 Mountain Lion (10.8.X) 并且完全按照说明进行操作,那么一切都应该没问题。 (我还没有升级到 Mavericks,所以不能保证它是否适用于那个版本。)

    【讨论】:

    • 这也发生在 Ubuntu 上,使用 apt install 命令。所以,我创建了软链接,coffee 和 node 开始工作了。
    【解决方案2】:

    如何在 Ubuntu 系统下解决问题

    事实上,“coffee”命令会调用 /usr/bin/node 继续其工作,然而,Ubuntu 系统上节点应用程序的原始“node”命令从“node”更改为“nodejs”避免名称冲突。这就是原因,shell 将符合您的“/usr/bin/env: node: No such file or directory”。无论何时输入

    $ coffee
    

    要解决这个bug,只要让shell在它的默认搜索路径中找到一个名为“node”的东西,这个所谓的“node”就会提升nodejs。命令“nodejs”位于/usr/bin/nodejs 路径下。

    我们将使用符号链接将“node”链接到nodejs,并将链接“node”放置在默认搜索路径中,以便shell找到它。

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

    但请注意,请确保 /usr/bin/ 下没有另一个“节点”命令,您可以通过尝试运行来检查它

    $ which node
    

    如果您安装了另一个“节点”应用程序,我不知道该怎么办。

    【讨论】:

    • 一个更标准的 Debian / Ubuntu 解决方案是安装 nodejs-legacy 包,它会创建这个符号链接。
    • 这是我在 Ubuntu 14.04 上的解决方案。
    【解决方案3】:

    在 Ubuntu 中你可以安装包 nodejs-legacy

    sudo apt-get install nodejs-legacy
    

    这个包只是创建一个二进制 nodejs 的符号链接

    【讨论】:

      【解决方案4】:

      您应该能够在构建系统中修复这一切,而无需在您的机器上添加符号链接。

      例如,如果节点位于 /usr/local/bin/node 中,您只需将 build_system 中的路径更改为:

      "path": "/usr/local/bin:$PATH"
      

      【讨论】:

        【解决方案5】:

        我在使用 Sublime Text 2 时遇到了同样的问题。 创建这个崇高的构建对我有用:

        {
        "cmd": ["coffee", "-c", "$file"],
        "selector" : "source.coffee",
        "path" : "/usr/local/lib/node_modules/coffee-script/bin/:/usr/local/bin:$PATH"  
        }
        

        【讨论】:

          【解决方案6】:

          以下代码在 Ubuntu 14.04 中为我工作:

          **$ sudo apt-get install NodeJS-legacy** 
          

          另一个问题是版本检查框架,例如:gulp -v 同样的代码也解决了这个问题。

          【讨论】:

          • 请提供更详细的答案,也许提供链接或来源以供其他人和提出问题的人参考以供将来参考。
          【解决方案7】:

          在控制台中输入下一个:

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

          【讨论】:

            猜你喜欢
            • 2021-05-31
            • 2016-03-04
            • 2013-11-05
            • 1970-01-01
            • 1970-01-01
            • 2021-07-10
            • 2015-08-20
            • 2015-06-24
            • 2013-08-03
            相关资源
            最近更新 更多