【发布时间】:2020-02-20 05:30:29
【问题描述】:
我正在学习 Three.js,并建立了一个运行 node.js 服务器并将 Three.js 作为节点模块导入的基本项目。
实际上我的设置有效,但如果这是一个好的设置,我有点困惑?
我正在考虑的事情基本上是我的 node_module 的漫长路径。在某些页面上,Three.js 仅通过以下方式导入:
import * as THREE from 'three';
但在我的情况下,我必须写完整路径:
import * as THREE from './node_modules/three/build/three.module.js';
这是正确的实现吗?
这是我的完整代码:
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<title>three.js webgl</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
<style>
body {
background-color: #cce0ff;
color: #000;
}
a {
color: #080;
}
</style>
</head>
<body>
<script type="module" src="index.js"></script>
</body>
</html>
index.js
**import * as THREE from './node_modules/three/build/three.module.js';**
const scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
var geometry = new THREE.BoxGeometry(1, 1, 1);
var material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
var cube = new THREE.Mesh(geometry, material);
scene.add(cube);
camera.position.z = 5;
var animate = function () {
requestAnimationFrame(animate);
cube.rotation.x += 0.01;
cube.rotation.y += 0.01;
renderer.render(scene, camera);
};
animate();
我需要使用 webpack 来打包吗?这能解决它找不到我的节点模块的路径吗?
【问题讨论】:
-
如果你改用
import * as THREE from 'three';会发生什么? -
documentation中提到,
import * as THREE from 'three';是使用官方npm包时的正确做法。 -
是的,可以在 chrome 中使用,但在 Firefox 中我得到
TypeError: Error resolving module specifier: three。我必须提供它在 Firefox 中工作的完整路径:import * as THREE from './node_modules/three/build/three.module.js'; -
你的 Webpack 配置文件是什么样子的?
-
我没有使用 webpack。也许这是我的问题?我需要 webpack 来解决这个问题吗?
标签: javascript node.js npm webpack three.js