使用Transcrypt调用其他Python脚本时出现'TypeError: module is undefined'
解决Transcrypt多文件编译后Firefox中出现
TypeError: module is undefined的问题 我来帮你排查这个Transcrypt多文件模块加载的问题,我之前也碰到过类似的情况,咱们一步步来解决:
首先检查HTML脚本的路径与加载顺序
你提到尝试添加<script>标签但没成功,首先要注意几个关键点:- 要加载的是
.mod.js后缀的文件——这是Transcrypt生成的模块依赖管理文件,而非普通的.js文件; - 路径拼写要准确!你写的
__javascrip...少了一个t,正确路径应该是__javascript__; - 加载顺序必须是先加载依赖模块,再加载主脚本。比如你的场景里,应该先加载
mymodule.mod.js,再加载myscript.mod.js。
正确的HTML脚本引用示例:
<script src="__javascript__/mymodule.mod.js"></script> <script src="__javascript__/myscript.mod.js"></script>- 要加载的是
确认Python代码中的导入逻辑正确
在myscript.py中导入mymodule时,使用标准的Python导入语句即可,不要添加相对路径或特殊语法:import mymoduleTranscrypt会自动将这种导入转换为对应的JS模块依赖,确保模块间的引用关系正确。
适配Firefox 58的兼容性限制
Firefox 58对模块加载的支持存在一些局限性,你可以尝试两个优化:- 给脚本标签添加
defer属性,确保脚本在DOM加载完成后再执行,避免因加载时机问题导致的模块未定义:<script src="__javascript__/mymodule.mod.js" defer></script> <script src="__javascript__/myscript.mod.js" defer></script> - 避免直接用
file://协议打开本地HTML文件,Firefox对本地文件的模块加载有安全限制。可以启动一个简单的本地服务器,比如用Python命令:
然后通过python -m http.serverhttp://localhost:8000/index.htm访问页面。
- 给脚本标签添加
重新确认Transcrypt编译命令
确保你编译的是主脚本文件(即依赖其他模块的myscript.py),Transcrypt会自动处理依赖模块的编译。执行编译命令时可以加上-b参数确保重新构建:transcrypt -b myscript.py
按照上面的步骤逐一排查,应该就能解决Firefox中module is undefined的错误了。
内容的提问来源于stack exchange,提问作者Dominic Price
相关产品推荐
相关产品推荐

