3

我在使用 transcrypt(版本 3.6.95)在多个文件之间拆分代码时遇到问题。作为一个基本示例,我在同一目录中有以下文件:

索引.htm

<html>
  <head>
    <meta charset="utf-8">
    <title>Transcrypt test</title>
</head>
<body>
  <div id="box"></div>
  <button onclick="myscript.set_box_content()">Set box content</button>
</body>
<script src="__javascript__/myscript.js"></script>    
</html>

我的模块.py

def helloworld():
    return "Hello world!"

我的脚本.py

from mymodule import helloworld

def set_box_content():
    document.getElementById("box").innerHTML = helloworld()

然后我跑

python -m transcrypt -n mymodule.py
python -m transcrypt -n myscript.py

它运行没有错误,并在 __javascript__ 目录中生成 mymodule.js、mymodule.mod.js、myscript.js 和 myscript.mod.js。

当我在 Firefox 58 中打开 index.htm 并打开控制台时,它显示“TypeError:模块未定义”。我尝试添加<script src="__javascript__/mymodule.js"></script>到 HTML 中,但这并没有帮助。我通读了 transcrypt 文档的这一部分-u,但是当我输入python -m transcrypt -h.

4

1 回答 1

2

与模块相反,单元(编译单元、组件)是一个相对较新的特性,它从一开始就在 Transcrypt 中。您需要 Transcrypt 3.6.101 才能使用单位。请注意,由于 CPython 是解释器而不是编译器,因此编译单元的概念在那里不起作用。

单元与模块的结合使用如下所示:

https://transcrypt.org/docs/html/special_facilities.html#transcrypt-s-unit-mechanism-and-creating-native-javascript-component-frameworks

这个例子应该让你开始,如果没有,请在评论或编辑中告诉我。

[编辑] 所有单元(与模块相反)都应单独编译,因此在示例中:

transcrypt -u .run animals.py

transcrypt -u .com cats.py

transcrypt -u .com dogs.py

因此,包含带有选项的运行时模块和带有.run选项的其他组件.com。如果需要,-n可以添加开关。

在多个单元中使用的模块应添加到运行时单元,即使用-u .run开关编译的模块。

于 2018-02-21T17:28:28.163 回答