Как запустить в nodejs файл javascript, созданный с помощью haste?
Если у меня есть файл, hello.hs:
main = putStrLn "Hello, World!"
Я могу скомпилировать его в hello.js с помощью команды haste:
hastec hello.hs
Как мне запустить файл результата hello.js под nodejs?
2 ответа
По умолчанию Haste's main
настроен на выполнение, когда браузер onload
событие пожары. Это, очевидно, не имеет смысла для узла, поэтому вам нужно передать --onexec
установите флаг Haste при компиляции вашей программы:
$ hastec --onexec hello.hs
Haste использует Node для запуска своего набора тестов таким образом. Обратите внимание, однако, что за исключением записи в стандартный вывод (например, putStrLn
), Ускорение не сопоставляет системные операции (файловый ввод-вывод и т. Д.) С эквивалентами узлов. Если вы пишете приложение, которое должно взаимодействовать с ОС, вам лучше использовать vanilla GHC.
Обновление: спасибо, и хороший ответ. Напомним, что если вы хотите скомпилировать и запустить hello.hs под узлом, две строки будут такими:
hastec --onexec hello.hs
node hello.js
Ускорение не знает об узле, поэтому файлы.js в производит ничего не экспортируют.
Вам нужно как-то дополнить файл.js для экспорта нужной вам функциональности, а именно, вам нужно экспортировать функцию hasteMain().
Вы можете попробовать опцию командной строки --with-js для hastec
Или вы можете просто добавить следующую строку в конец вашего файла hello.js:
module.exports = hasteMain;
Как только вы это сделаете, вы можете загрузить hello.js как модуль, используя require и запустить код:
hasteMain = require('./hello.js');
hasteMain();
Вы также можете посмотреть на ghcjs. Команда React недавно переместила один из модулей из ускорения в ghcjs