仅通过浏览器与CDN导入Three.js和Three-Globe模块遇阻求助
可以直接在main.js里用import导入ThreeGlobe,无需额外用await确保加载——浏览器的ES模块机制会自动处理依赖的加载顺序,只要导入语法正确就行。针对你遇到的几个问题,具体解决方法如下:
模块无default导出:Three-Globe的ES模块用的是命名导出而非默认导出,导入时要写:
import { ThreeGlobe } from 'https://unpkg.com/three-globe?module';.mjs版本依赖kapsule解析失败:不要直接导入three-globe的.mjs文件,用带
?module参数的URL即可——unpkg会自动处理模块依赖的解析和打包,帮你加载kapsule这类依赖。找不到window.THREE的BufferGeometry:Three-Globe的ES模块版本不需要全局的
window.THREE,只要你先正确导入Three.js的ES模块,unpkg会自动处理peer依赖关联:import * as THREE from 'https://unpkg.com/three/build/three.module.js'; import { ThreeGlobe } from 'https://unpkg.com/three-globe?module';全局脚本引入导致Three.js多实例警告:全局脚本和ES模块导入不能混用,否则会生成两个独立的Three.js实例。把所有依赖都改成ES模块导入方式,去掉传统的
<script src="xxx.js"></script>(除了引入main.js的标签,要加type="module")。统一模块后THREE未定义、BufferGeometry读取失败:确保导入顺序正确(先导入Three.js,再导入ThreeGlobe),并且在代码里使用导入的
THREE对象,不要依赖全局变量。比如完整的main.js开头:// main.js import * as THREE from 'https://unpkg.com/three/build/three.module.js'; import { ThreeGlobe } from 'https://unpkg.com/three-globe?module'; // GLTFLoader也要用ES模块版本 import { GLTFLoader } from 'https://unpkg.com/three/examples/jsm/loaders/GLTFLoader.js'; // 后续正常使用 const scene = new THREE.Scene(); const globe = new ThreeGlobe(); scene.add(globe);
另外要注意,引入main.js的script标签必须声明为模块类型:
<script type="module" src="./main.js"></script>
内容的提问来源于stack exchange,提问作者Erik Paulson

