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

14

我可以在普通的命令提示符中顺利运行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到路径名中没有空格的目录后,我仍然无法解决这个问题。

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


关于您的终点报价(我想从Cygwin运行的Emacs中使用js-comint运行Node JS控制台):(1)我有相同的目标,只是在Emacs的M-x“shell”中(我不熟悉js-comint),(2)关于您的目标-除了似乎遗憾地没有Cygwin-,Google搜索(node emacs shell)找到3个结果,我看到这个页面也有一个发现1 (Emacs wiki for Node.js )Using js-comint - Destiny Architect
注意:在此提问之前的1.5年,此问题已经在stackoverflow.com/questions/10043177/node-js-cygwin-not-supported上被问过了;因此请先查看那里并在那里提供解决方案--除非它们是从这里开始的,如Running from Cygwin.bat:那么最好保留这里的细节(因为是从这里开始的),并从那里链接到它们;那里已经有很多答案没有在这里找到。 - Destiny Architect
关于您的最终目标引用(在Windows上从Emacs运行Node JS控制台),如果不是或不仅仅是引用(使用js-comint从Cygwin运行),请参见此前1.1年提出的问题[stackoverflow.com/questions/8909836/how-to-run-node-js-interactively-in-emacs-on-windows]。 - Destiny Architect
5个回答

22

在cygwin控制台中它不起作用,但如果从Windows控制台运行它,则可以在cygwin shell中运行。只需打开命令提示符并运行Cygwin.bat即可获取shell。然后你就可以运行node。

根据此处的说法,cygwin的控制台不是真正的控制台,而是伪装成管道。


1
是的,我现在尝试了一下,对我有用(所以我给出答案+1 :-)。具体来说,在Windows中,我运行“C:\ cygwin64 \ Cygwin.bat”会话引用( $ node --version v0.10.28 $ node
[在“Cygwin64终端”中运行时,我遇到了类似于Q的故障])。 超越Q到我知道的最好的控制台环境,引用( $ emacs [M-x“shell”] $ node
net.js:156 this._handle.open(options.fd); ^ Error: EINVAL,无效参数 at new Socket (net.js:156:18) at process.stdin (node.js:664:19) at startup (node.js:145:16) at node.js:906:3 $)-如果可以工作,仍然非常有用!
- Destiny Architect
作为[更复杂的修复方法,也可以使用Console2来运行Cygwin](https://dev59.com/eWkw5IYBdhLWcg3wPIB7#17416869)。 - Destiny Architect
此情况(mintty终端对节点无法工作)已在Joyent Node官方问题报告中被paulcw注意到。链接:https://github.com/joyent/node/issues/6459#issuecomment-34620129 - Destiny Architect

6

当尝试通过SSH连接从Ubuntu到Windows/Cygwin/SSHD时,可能会出现类似的问题。

在修复路径后,运行

node

似乎会挂起(忽略所有输入),但通过按下ctrl-C可以杀死进程。

然而,运行

node --interactive

正常工作,但是EOF字符似乎是ctrl-Z而不是正常的Unix/Cygwin ctrl-D。


谢谢你!我从来没有想过使用c-Z,不过回想起来,这很有道理。即使没有cygwin支持,似乎添加对c-D的解释也很容易。 :-( - bill.lee

6
我认为这是使用Cygwin中的Win发行版引起的,因为Cygwin模拟*nix环境,而Windows的node.js寻找的是Win库而不是nix库。为了使node.js在Cygwin中工作,您必须自己构建它。此外,最新版本在Cygwin上无法工作。
官方维基的当前状态:尽管符合POSIX标准,但Cygwin已不再受支持。最后一个编译版本是0.4.12。

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


啊哈,我明白了。我不想使用一个将来不会更新的旧版本,所以我选择根据我的需求在Windows/Cygwin上运行GNU Emacs。 - luxbock
我不使用Emacs,但您不能使用Emacs的Windows版本吗? - Avner Solomon

4
Node.js很久以前就停止支持Cygwin了。我尝试使用一些旧版本,但这会导致npm和基本上可以通过管理器安装的每个其他库都出现很多问题。
我做了什么:编写了一个Windows shell脚本,将路径转换为类似Windows的路径,但这只是一个非常简单粗暴的工作,所以我暂时不会分享它。然后,我在/usr/bin中创建了这个bat文件的符号链接,这就是我现在的调用方式。此外,我认为我立即在那里启动了REPL,因为我拥有的Node版本默认情况下不会自己执行。
我尝试构建它,但构建非常混乱。他们使用了SCons和一些其他库,而那个库现在已经过时了(我正在为其他项目使用SCons,所以我没有尝试将其降级)。
总之,如果您只需要在Emacs中的JavaScript解释器,请尝试Mozrepl,Node.js无法与其良好协作。

0

我使用rlwrap node --interactive解决了这个问题。 --interactive开关可以防止它挂起,而rlwrap可以修复历史记录导航等问题。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接