node.js – 需要来自nodejs的fay代码

是否可以在nodejs中从服务器端的其他简单
javascript文件中获取fay编译的模块?那会很棒.也许在编译器中有一些选项可以生成commonjs兼容模块? 最佳答案 这可能是一个坏主意,因为它在很大程度上取决于fay生成的代码的特殊性.

请注意以下几点:

>无论编译模块的名称如何,fay都会实例化为变量main.
>在node.js下,来自require的返回值是模块的modules.export(最初与导出的对象相同 – 但它不一定保持这种状态).
>在使用var声明其作用域之前,可以使用变量.引用的变量是相同的.它不关心它的源代码,以及运行时发生的一切.
> Fay默认情况下(即没有–library)可以实例化一个对象并执行main.

值得注意的是,这意味着我们可以在main中修改module.exports或export以导出fay代码.当然,我们必须使用ffi,但这是一个相当简单的事情;以下,编译没有–library(其中,是的,有点违反直觉,并且确实证实了这是一个令人讨厌的黑客的假设,不是吗)在某种程度上起作用:

import FFI

main :: Fay ()
main = ffi "module.exports = main"

当从节点需要时,返回的对象是有效的

{ 'Main$main': 
   { forced: true,
     value: { value: [Circular] } },
  _: [Function: Fay$$_],
  '$': [Function: Fay$$$],
  '$fayToJs': [Function: Fay$$fayToJs],
  '$jsToFay': [Function: Fay$$jsToFay] }

凭借Fay内部表示的工作知识,可以(尽管可能付出太多努力)为所有thunk -forcing等编写javascript包装器.

(我们可以做更多 – 实际上,通过更多的ffi工作,我们可以将所有绑定都写为ffi代码.但这会有点愚蠢.)

点赞