如何在 nodejs 中 运行 急速生成一个 javascript 文件?

How to I run in nodejs a javascript file produced by haste?

如果我有文件,hello.hs:

main = putStrLn "Hello, World!"

我可以使用加速命令将其编译为 hello.js:

hastec hello.hs

如何在nodejs下运行结果hello.js文件?

haste 不了解节点,因此 produces 中的 .js 文件不会导出任何内容。

您需要以某种方式扩充 .js 文件以导出您想要的功能,即您需要导出 hasteMain() 函数。

您可以尝试 hastec 的 --with-js 命令行选项

或者您可以简单地将以下行附加到 hello.js 文件的末尾:

module.exports = hasteMain;

完成后,您可以使用 require 和 运行 代码将 hello.js 作为模块加载:

hasteMain = require('./hello.js');
hasteMain();

您可能还想看看 ghcjs。 React 团队最近将其中一个模块从 haste 移到了 ghcjs

默认情况下,Haste 的 main 设置为在浏览器的 onload 事件触发时执行。这显然对 Node 没有意义,所以你需要在编译程序时将 --onexec 标志传递给 Haste:

$ hastec --onexec hello.hs

Haste 以这种方式使用 Node 运行 其测试套件。但是请注意,除了写入标准输出(如 putStrLn)之外,Haste 不会将系统操作(文件 IO 等)映射到 Node 等价物。如果您正在编写需要与 OS 交互的应用程序,您最好使用 vanilla GHC。

更新: 谢谢你,很好的答案。回顾一下,如果你想在节点下编译和 运行 hello.hs ,这两行将是:

hastec --onexec hello.hs
node hello.js