Sublime Text CoffeeScript构建系统:`env:node:没有这样的文件或目录`

Cou*_*one 43 build-automation coffeescript sublimetext sublimetext3

我正在尝试在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]
Run Code Online (Sandbox Code Playgroud)

我的构建系统看起来像这样:

{
    "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"
}
Run Code Online (Sandbox Code Playgroud)

有两件事情很奇怪.

1)它说它正在查找存在/usr/bin符号链接的位置coffee.

2)由于(1),我推翻$PATH,包括实际位置coffee/usr/local/lib/node_modules/coffee-script/bin,但出于某种原因,$PATH没有被覆盖得当,它与默认的坚持$PATH.

注意事项:

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

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

iii)我有另一个Compass这样的构建系统,工作正常.

有人遇到类似的问题或问题吗?有任何想法吗?

Mat*_*DMo 96

在终端中,键入which node,然后在该位置创建符号链接/usr/bin.例如,如果node生活在/usr/local/bin,则创建符号链接,如下所示:

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

如果你查看coffee脚本的来源,你可能会发现第一行是:

#!/usr/bin/env node
Run Code Online (Sandbox Code Playgroud)

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

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


Sto*_*yes 30

如何解决Ubuntu系统下的问题

事实是"coffee"命令将调用/ usr/bin/node继续其工作,但是,Ubuntu系统上节点应用程序的原始"node"命令从"node"更改为"nodejs"以避免名称冲突.这就是原因,shell将符合你"/ usr/bin/env:node:没有这样的文件或目录".每当你打字

$ coffee
Run Code Online (Sandbox Code Playgroud)

要解决这个问题,只需让shell在其默认搜索路径中找到一个名为"node"的东西,这个所谓的"node"将提升nodejs.命令"nodejs"位于/ usr/bin/nodejs的路径下.

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

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

但要注意,确保在/ usr/bin /下没有其他"节点"命令,您可以通过尝试运行来检查它

$ which node
Run Code Online (Sandbox Code Playgroud)

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

  • Debian/Ubuntu的一个更标准的解决方案是安装**nodejs-legacy**包,它创建了这个符号链接. (14认同)
  • 这是我在Ubuntu 14.04上的解决方案. (2认同)

wna*_*ich 24

在Ubuntu中,您可以安装包nodejs-legacy

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

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