Как запустить в 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

Другие вопросы по тегам