如果我有一个文件,hello.hs:如何在nodejs中运行haste生成的JavaScript文件?
main = putStrLn "Hello, World!"
我可以编译它使用急速命令hello.js:
hastec hello.hs
如何运行下的的NodeJS结果hello.js文件?
如果我有一个文件,hello.hs:如何在nodejs中运行haste生成的JavaScript文件?
main = putStrLn "Hello, World!"
我可以编译它使用急速命令hello.js:
hastec hello.hs
如何运行下的的NodeJS结果hello.js文件?
默认情况下,当浏览器的onload
事件触发时,Haste的main
设置为执行。这显然是没有意义的节点,所以你需要通过--onexec
标志编译程序时的急速
$ hastec --onexec hello.hs
急速使用节点,以这种方式运行其测试套件。但是,请注意,除了写入标准输出(如putStrLn
)之外,Haste不会将系统操作(文件IO等)映射到节点等价物。如果您正在编写需要与操作系统交互的应用程序,最好使用vanilla GHC。
更新: 谢谢你,很好的答案。回顾一下,如果你想在节点下编译并运行hello.hs,那么这两条线就是:
hastec --onexec hello.hs
node hello.js
haste不知道节点,所以生产中的.js文件不会导出任何内容。
您需要以某种方式扩充.js文件以导出所需的功能,即您需要导出hasteMain()函数。
您可以尝试使用--with-JS命令行选项来hastec
或者你可以简单地将下面的行添加到您的hello.js文件的末尾:
module.exports = hasteMain;
一旦你这样做这一点,你可以加载hello.js为使用需要的模块和运行代码:
hasteMain = require('./hello.js');
hasteMain();
您可能也想看看ghcjs。 React团队最近将其中一个模块从急速移动到ghcjs
valderman,你说得对,使用香草GHC更好。但是我在想,如果我或者其他人想要为那些不在乎模块是用Haskell编写的人编写可重用的节点模块,这将是一个很好的选择。我意识到文件IO和所有不存在的内容,但是GHC中的外部函数接口功能应该足够用于有线连接了。 – zumalifeguard
当然,使用Haste完全可以做到这一点,但它需要一些额外的工作(即所有FFI的东西)。 – valderman