如何在Windows上的Emacs中以交互方式运行node.js

时间:2012-01-18 12:07:23

标签: javascript node.js emacs

我认为这样可行:

(defun my-node ()
  (interactive)
  (pop-to-buffer (make-comint "my-node" "node")))

但是当我执行M-x my-node并在comint缓冲区中输入1+1时,它不会显示任何输出。

这是在Windows 7上的Emacs 24.0.50.1中安装的NodeJS没有任何特殊配置。

M-x compile RET node hello-world.js RET中以非交互方式调用node.js可以正常工作。在node中以交互方式运行cmd可以正常工作。

这可能是相关的:当我运行M-x shell并在shell缓冲区中输入node然后输入1+1时,它不会显示结果。我必须遗漏一些非常基本的东西。

更新

可能相关:emacs/Python: running python-shell in line buffered vs. block buffered mode - Stack Overflow

4 个答案:

答案 0 :(得分:12)

将node.js(使用节点v0.8.1测试)作为Emacs下的劣质shell的最简单方法是使用js-comint包。然后,设置(setq inferior-js-program-command "node --interactive")以强制节点以交互模式运行。然后命令M-x run-js将打开解释器。

同样,您可以轻松验证node --interactive是否可以在eshell中运行。

答案 1 :(得分:3)

http://www.gnu.org/software/emacs/windows/Sub_002dprocesses.html开始,看起来可能发生的是节点正在缓冲输出。如果有一个选项可以修改它的缓冲,你可以尝试传递它。

可能还有另一种方法可以解决它,假设它是一个缓冲问题,但是我的Windows知识还不够完整。举个例子,我会喜欢在Windows平台上对此进行一般性解决方案,当它出现时,这是一个令人讨厌的问题。

答案 2 :(得分:3)

我找到了一个解决方案。

创建一个启动JavaScript REPL接口的节点脚本。

节点在-node.js中:

var repl = require("repl");
repl.start();

将“node path \ to \ node-in-node.js”传递给make-comint而不是简单的“node”。

(defun my-node-shell ()
  (interactive)
  (pop-to-buffer (make-comint "Node Shell" "node" nil "C:\\run\\node-in-node.js")))

运行M-x my-node-shell以在Windows Emacs中运行JavaScript shell。我不知道为什么会这样。通过Shift + Enter选项卡完成,语法突出显示,多行输入不起作用。

答案 3 :(得分:0)

如果js-comint不适用于您,则可以try

(defun node-repl () (interactive)
      (setenv "NODE_NO_READLINE" "1") ;avoid fancy terminal codes
      (pop-to-buffer (make-comint "node-repl" "node" nil "--interactive")))
(node-repl)

但是nodejs-repl软件包似乎更好地工作。