【发布时间】:2021-07-21 22:20:40
【问题描述】:
首先我想说我对 javascript 和使用库非常陌生。我试图让一些基本的three.js 代码工作,但它不工作,我不知道为什么。我已经使用 Threejs.org 文档设置了一个基本场景,并且正在尝试设置一些基本的轨道控制。一切正常,直到我尝试将轨道控件导入到我的主脚本文件中。然后我得到一个错误:
未捕获的类型错误:无法解析模块说明符“三”。相对引用必须以“/”、“./”或“../”开头。
我没有尝试太多来解决我的问题,因为我什至不知道从哪里开始。我检查了我的拼写并确保我的导入具有正确的相对路径。
这是有效的代码:
import * as THREE from '/node_modules/three/build/three.module.js';
// import { OrbitControls } from '/node_modules/three/examples/jsm/controls/OrbitControls.js';
// Construct basic scene elements
const camera = new THREE.PerspectiveCamera(
75,
window.innerWidth / window.innerHeight,
1,
1000
);
const renderer = new THREE.WebGLRenderer();
const scene = new THREE.Scene();
// const controls = new OrbitControls(camera, renderer.domElement);
// Set parameters for scene elements
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
当我取消注释轨道控件的第二个导入时,它会中断并给我上面的错误。是什么导致了错误,我该如何解决?
提前致谢。
【问题讨论】:
-
您能解释一下为什么要这样导入吗?使用节点模块,您通常可以简单地通过引用 npm 模块的名称来导入,例如 import any from “modulename”。您很少需要提供到节点模块和特定文件夹的路径,因为节点/Babel 会在内部为您解决。
-
那也行不通。我已经按照文档说的那样安装了模块,但它不起作用。
-
您能否创建一个堆栈闪电战或代码沙箱或类似的东西来显示您面临的问题?
-
three.js的官方文档建议无处从node_modules导入主库像这样:import * as THREE from '/node_modules/three/build/three.module.js';。对于npm项目,它应该是import * as THREE from 'three';。此外,节点工作流必须使用像 rollup 这样的构建工具来创建应用程序包。查看github.com/Mugen87/three-jsm 进行最小设置。 -
@Mugen87 如果从
<script type="module>引用主文件,则必须使用直接路径,因为浏览器无法解析npm包引用。我将在答案中进一步扩展。
标签: javascript three.js