是否可以从nodejs服务器端的其他简单javascript文件中请求fay编译的模块?那太好了。也许编译器中有一些选项可以产生与commonjs兼容的模块?
最佳答案
这可能不是一个好主意,因为它很大程度上取决于fay生成的代码的特性。
请注意以下几点:
main
中。 require
的返回值是模块的modules.export
(最初与export
是同一对象,但不一定要保持这种状态)。 var
声明其作用域之前,可以使用变量。引用的变量是相同的。它不关心其源顺序,也不关心运行时发生的一切。 --library
)可以实例化对象并执行main
。 值得注意的是,这意味着我们可以在
main
内修改module.exports
或exports
以导出收费代码。当然,我们必须使用ffi,但这很简单。以下内容在没有--library
的情况下进行了编译(是的,这有点违反直觉,并且确实使人相信这是一个讨厌的hack的假设,不是吗),在某种程度上可以起作用:import FFI
main :: Fay ()
main = ffi "module.exports = main"
当从节点开始
require
时,返回的对象具有以下作用:{ 'Main$main':
{ forced: true,
value: { value: [Circular] } },
_: [Function: Fay$$_],
'$': [Function: Fay$$$],
'$fayToJs': [Function: Fay$$fayToJs],
'$jsToFay': [Function: Fay$$jsToFay] }
掌握了Fay的内部表示形式后,就可以(尽管可能会花费很多精力)编写一个JavaScript包装程序来应对所有的重击。
(我们可以做更多的事情-实际上,通过做更多的ffi工作,我们可以将所有绑定(bind)编写为ffi代码。不过,这样做有点愚蠢。)