我在使用transcrypt(版本3.6.95)将代码拆分到多个文件时遇到麻烦。作为一个基本示例,我在同一目录中包含以下文件:

索引

<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>

mymodule.py
def helloworld():
    return "Hello world!"

myscript.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文档的this part,但是当我键入-upython -m transcrypt -h开关未出现在可用命令列表中。

最佳答案

与模块相反,单元(编译单元,组件)是一个相对较新的功能,从一开始就已在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开关编译的模块。

关于javascript - Transcrypt:使用来自另一个python脚本的代码会导致 'TypeError: module is undefined',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48911754/

10-12 23:09