Node.js 需要来自nodejs的fay代码
在nodejs服务器端是否可能需要fay编译的来自其他简单javascript文件的模块?那太好了。也许编译器中有一些选项可以生成与commonjs兼容的模块 可以使用javascript中的fay代码,但目前有点冗长,需要使用完全限定名并手动强制函数调用Node.js 需要来自nodejs的fay代码,node.js,fay,Node.js,Fay,在nodejs服务器端是否可能需要fay编译的来自其他简单javascript文件的模块?那太好了。也许编译器中有一些选项可以生成与commonjs兼容的模块 可以使用javascript中的fay代码,但目前有点冗长,需要使用完全限定名并手动强制函数调用 var m = new Main(); document.body.innerHTML = "The 10th fibonacci number is : " + m._(m.Main$fibN(9)); 目前,Main内部的一切都是扁平的
var m = new Main();
document.body.innerHTML = "The 10th fibonacci number is : " + m._(m.Main$fibN(9));
目前,Main内部的一切都是扁平的,我们希望将每个模块的编译分开,这样每个模块都可以单独输出。(然后我们也可以迁移到)
然后,我们需要输出一个包装器,该包装器对每个模块进行强制和类型转换,这样在从JavaScript调用时就不需要手动进行转换
以下是一些相关的问题:,这可能是个坏主意,因为这在很大程度上取决于fay生成的代码的特性。 注意以下几点:
- 不管编译模块的名称如何,fay都会实例化到变量
main
- 在node.js下,
的返回值是模块的require
(它最初是与modules.export
相同的对象,但不一定保持这种状态)export
- 变量可以在使用
声明其作用域之前使用。引用的变量相同。它不关心源代码的顺序,也不关心运行时发生的一切var
- 默认情况下,Fay(即没有
)可以实例化一个对象并执行--库
main
main
中修改module.exports
或exports
以导出fay代码。当然,我们必须使用外国金融机构,但这是一件相当简单的事情;在某种程度上,以下在编译时没有使用--library
(是的,这有点违反直觉,并且确实证实了这是一个令人讨厌的黑客行为的假设,不是吗):
import FFI
main :: Fay ()
main = ffi "module.exports = main"
当require
'd来自节点时,返回的对象是
{ 'Main$main':
{ forced: true,
value: { value: [Circular] } },
_: [Function: Fay$$_],
'$': [Function: Fay$$$],
'$fayToJs': [Function: Fay$$fayToJs],
'$jsToFay': [Function: Fay$$jsToFay] }
有了Fay内部表示的实用知识,就有可能(尽管可能太费劲)为所有thunk强制等编写javascript包装
(我们可以做得更多——事实上,再多做一点ffi工作,我们就可以把所有绑定都写成ffi代码。不过这有点傻。)谢谢你的回复。目前,我有很多代码是用coffeescript编写的,并在服务器上的node.js环境中执行。由于缺乏良好的类型检查系统和haskell的其他优点,我想尝试在faylang中重写一些单独的模块。现在,我不知道如何从我的旧代码中与这些模块交互。如何导出此主功能?当您实例化模块时,将导出Fay源中主模块导出的所有内容<代码>var m=新主();m、 _uz(m.main)应该注意,tricknodejs不会让这种全局范围的污染飞起来——fay编译的模块基本上都是文件范围的,这是一种无用的包含。啊,是的,当然。新模块的生成已经基本完成,因此应该添加一个--node标志或类似标志,以便为所有模块生成导出语句。聪明:)编写包装器是一项工作,但使用新的代码生成器应该不会太难。有了一个标志,编译器可以为每个Fay模块生成严格的模块,这些模块可以适当地强制和转码。