You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ThreeJS模块化实现:将Three代码从HTML中分离

解决Three.js模块化导入问题

一、修复"Cannot use import statement outside a module"错误

浏览器默认将普通JS文件视为非模块脚本,不支持import语法,解决方法:

  • 在HTML中引入你的JS文件时,添加type="module"属性:
    <script type="module" src="your-script.js"></script>
    

二、正确导入Three.js

根据使用场景选择对应导入方式:

场景1:使用npm安装的Three.js

如果已通过npm install three安装包,直接在JS文件顶部写:

import * as THREE from 'three';
// 后续正常使用THREE对象,比如
const scene = new THREE.Scene();

场景2:使用本地的three.module.js文件

确保相对路径与HTML文件位置匹配,导入语句改为:

import * as THREE from './build/three.module.js';
// 注意路径开头的./,避免路径解析错误

三、动态import()的正确用法

你之前用let THREE= import("../build/three.module.js")的问题在于,import()是异步函数,返回Promise对象,不能直接赋值。需用以下方式处理:

// 方法1:async/await
async function initThree() {
  const THREE = await import('../build/three.module.js');
  // 所有依赖THREE的代码写在这里
  const camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000);
}
initThree();

// 方法2:Promise.then
import('../build/three.module.js').then((THREE) => {
  // 在这里编写Three.js代码
  const renderer = new THREE.WebGLRenderer();
  document.body.appendChild(renderer.domElement);
});

额外注意事项

  • 本地开发时建议用本地服务器(比如VS Code的Live Server插件)打开HTML,避免浏览器跨域限制导致模块加载失败。
  • 检查three.module.js的路径是否正确,确保文件确实存在于指定位置。

内容的提问来源于stack exchange,提问作者mw42

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 07:45:19