引入threex.domevents.js遇报错,求非Node.js环境解决方法
解决threex.domevents.js在浏览器/Django环境下的引入错误
错误原因分析
module is not defined:你使用的unpkg上的threex-domevents@1.0.0是CommonJS模块格式,浏览器环境没有Node.js的module对象,直接引入会触发这个错误。THREEx is not defined:第一个错误导致脚本加载失败,THREEx全局变量未被注册,因此main.js中调用THREEx.DomEvents时找不到该对象。
解决方案
方案1:修改threex.domevents.js代码(推荐)
- 打开
https://unpkg.com/threex-domevents@1.0.0/threex.domevents.js,复制全部代码。 - 在本地创建
threex.domevents.js文件,粘贴代码后修改最后一行:- 原代码最后一行:
module.exports = THREEx.DomEvents; - 修改为:
// 将THREEx注册到浏览器全局对象 if (typeof window !== 'undefined') { window.THREEx = window.THREEx || {}; window.THREEx.DomEvents = THREEx.DomEvents; }
- 原代码最后一行:
- 在Django项目中,将修改后的文件放入
static/js/目录(无此目录则自行创建)。 - 在HTML模板中通过Django静态标签引入:
确保该标签位于{% load static %} <script src="{% static 'js/threex.domevents.js' %}"></script>three.min.js之后、main.js之前。
方案2:使用UMD格式的兼容版本
替换原CDN链接为浏览器兼容的UMD打包版本(注意匹配你的Three.js版本):
<!-- 替换原unpkg引入链接 --> <script src="https://cdn.jsdelivr.net/npm/threex-domevents@1.0.0/dist/threex-domevents.umd.js"></script>
验证修改
刷新页面后两个错误应消失,可在main.js中继续使用THREEx.DomEvents绑定交互,示例:
// 给立方体绑定点击事件 domEvents.addEventListener(cube, 'click', function(event) { console.log('立方体被点击了!'); });
内容的提问来源于stack exchange,提问作者fr4nsiscus
相关产品推荐
相关产品推荐

