如果我有一個文件,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