2

使用 Transcrypt for python to javascript 编译我有 2 个相互需要的模块。例如:

我的测试.py:

import myTest2
def test():
    myTest2.test()
someConstant = 1

和 myTest2.py:

import myTest
def test():
    console.log(myTest.someConstant)

编译为 javascript 并调用后,myTest.test()我得到一个 RangeError:超出最大调用堆栈大小。我怎样才能避免这种情况,但保留两个相互使用的模块?提前致谢。

4

2 回答 2

4

在 Transcrypt 中,导入是在编译时而不是运行时解析的,因为编译器必须知道要在生成的 JavaScript 中包含哪些模块。此外,导入解析是一次性完成的。解析发生在单次通过这一事实意味着不支持相互(或一般循环)导入。

因此,如果您有两个模块需要彼此的某些东西,那么要走的路是将这些东西分解并放入由两者导入的第三个模块中。

解析发生在编译时的事实也意味着在运行时条件导入中没有意义,使用'if'。对于条件导入,请使用 __pragma__ ('ifdef', ...) 来完成它的工作编译时间。

此类限制在以下位置进行了解释:

http://www.transcrypt.org/docs/html/special_facilities.html#transcrypt-s-module-mechanism

于 2016-09-01T21:12:04.607 回答
0

myTest尝试在需要时从原样导入。

mytest2.py

def test():
    from myTest import someConstant
    console.log(someConstant)
于 2016-09-01T08:30:21.943 回答