从Cygwin控制台启动Node.js时出现问题

时间:2013-06-25 12:31:14

标签: windows node.js emacs cygwin

我从常规命令提示符运行node.exe没有问题:

C:\>node --interactive
> console.log("Works fine");
Works fine

但是当我尝试从Cygwin控制台做同样的事情时,我遇到了这个:

Olli@Olli-MBRr /cygdrive/c
$ node.exe

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: read ENOTCONN
    at errnoException (net.js:900:11)
    at Socket._read (net.js:391:21)
    at Socket.Readable.read (_stream_readable.js:320:10)
    at Socket.read (net.js:293:43)
    at new Socket (net.js:185:10)
    at process.stdin (node.js:660:19)
    at startup (node.js:145:16)
    at node.js:901:3

起初我以为可能是因为Cygwin在路径名中有空格(C:\ Program Files \ nodejs),但在将node.js安装到路径名中没有空格的目录之后无法解决问题。

我想使用js-comint从Emacs(从Cygwin运行)运行Node JS控制台,但我遇到了这个错误并且不知道如何解决它。

5 个答案:

答案 0 :(得分:21)

它不能在cygwin控制台上运行,但如果你从windows控制台运行它,它将在cygwin shell中运行。只需打开命令提示符并运行Cygwin.bat即可获取shell。然后你可以运行node。

根据this cygwin的控制台不是真正的控制台,它是伪装的管道。

答案 1 :(得分:6)

我认为这是因为在cygwin中使用win发行版引起的,因为cygwin模拟了一个* nix环境,而windows的node.js查找的是win库而不是nix的。为了让node.js在cygwin中工作,你必须将它构建为yourslef。最新版本也不适用于cygwin。

来自官方维基的当前状态:不再支持Cygwin,尽管符合POSIX标准。编译的最新版本是0.4.12

https://github.com/nodejs/node/wiki/Installation#building-on-cygwin

答案 2 :(得分:6)

尝试通过ssh从Ubuntu框连接到windows / cygwing / sshd时会发生类似的问题。

修复路径后,运行

  

节点

似乎挂起(忽略所有输入)但是通过ctrl-C

响应kill

然而正在运行

  

node --interactive

工作正常,除了EOF字符似乎是ctrl-Z而不是正常的unix / cygwin ctrl-D

答案 3 :(得分:4)

Node.js很久以前就放弃了对Cygwin的支持。我尝试使用一些旧版本,但它现在意味着npm和基本上每个其他库都可以通过管理器安装的许多问题。

我做了什么:编写了一个Windows shell脚本,将路径转换为类似Windows的路径,但这是一个非常快速和肮脏的工作,所以我还不会分享它。然后我在/usr/bin中对这个bat文件进行符号链接,这就是我现在调用它的方式。另外,我想我马上就开始使用REPL,因为我所拥有的Node版本默认情况下不会单独执行。

我尝试过构建它,但构建非常混乱。他们在它上面使用了SCons和其他一些库,而且这个库现在已经过时了(我正在使用SCons进行其他项目,所以我没有尝试降级它。)

最重要的是,如果您只需要在Emacs中使用JavaScript解释器 - 尝试使用Mozrepl,Node.js就不想玩得很好。

答案 4 :(得分:1)

使用rlwrap node --interactive为我解决了这个问题。 --interactive开关可防止其挂起,rlwrap修复了带历史记录导航的怪癖等。

注意:您可能需要通过Cygwin的软件包管理器安装rlwrap