使用Transcrypt for python进行javascript编译我有2个模块需要彼此。例如:
myTest.py:
import myTest2
def test():
myTest2.test()
someConstant = 1
和myTest2.py:
import myTest
def test():
console.log(myTest.someConstant)
编译成javascript后,调用myTest.test()
我得到一个RangeError:超出了最大调用堆栈大小。
我怎样才能避免这种情况,但保留2个相互使用的模块?
提前谢谢。
答案 0 :(得分:4)
在Transcrypt中,导入在编译时而不是运行时解析,因为编译器必须知道要在生成的JavaScript中包含哪些模块。此外,导入解决方案一次性完成。解决方案在一次通过中发生这一事实意味着不支持相互(或通常是循环)导入。
因此,如果你有两个相互需要的模块,那么就要把这些东西分解出去并放入第二个模块,由两者导入。
解决方案在编译时发生这一事实也意味着在运行时条件导入中没有任何意义,使用' if'。对于条件导入,使用__pragma __(' ifdef',...)来完成编译工作。
这样的限制解释如下:
http://www.transcrypt.org/docs/html/special_facilities.html#transcrypt-s-module-mechanism
答案 1 :(得分:0)
尝试在需要时从myTest
导入。
在mytest2.py
def test():
from myTest import someConstant
console.log(someConstant)