要求不按预期工作

时间:2017-02-11 17:31:33

标签: javascript three.js require

var THREE = require('three');
require('three/examples/js/loaders/OBJLoader.js');

在我需要来自node_modules的三个j之后,我决定使用它们提供的OBJLoader,但是我遇到了意外错误。

THREE is not defined
    at eval (eval at <anonymous> (experiment.js:133), <anonymous>:5:1)

在OBJLoader中:

THREE.OBJLoader = function ( manager )

它告诉我OBJLoader里面的三个没有被定义,虽然我只需要它。尝试以这种方式要求文件时我该怎么办?

3 个答案:

答案 0 :(得分:3)

由于three.js,尤其是依赖于定义的全局变量THREE的示例代码,使用browserify等等有点复杂。

我在browserify-projects中主要做的是创建一个如下所示的文件three-loader.js

const THREE = require('three');

// make three available for files from examples
window.THREE = THREE;

// load stuff from examples
require('three/examples/js/loaders/OBJLoader.js');

module.exports = THREE;

项目中的每个地方都使用const THREE = require('./three-loader');而不是require('three');

另一种选择是将examples文件夹中的文件复制到项目中,并在这些文件的顶部添加一行const THREE = require('three');

答案 1 :(得分:0)

文件three/examples/js/loaders/OBJLoader.js并不是必需的 - 没有module.exports。文件仍然可以require,但是它只会尝试在该文件的上下文中执行代码 - 并且在该文件的上下文中没有定义变量THREE。有问题的文件被设计为在浏览器中加载,其中定义了窗口/全局变量THREE。

Three.js是一个客户端库 - 要在浏览器中加载,您可以使用脚本标记:

<script src="js/three.min.js"></script>

这将在浏览器中建立变量THREE,以便您可以通过以下方式加载示例OBJLoader.js:

<script src="js/OBJLoader.js"></script>

答案 2 :(得分:-1)

这是因为您正在尝试加载尚未安装的节点模块。有时也没有安装与模块相关的其他依赖项,并且可能导致它失败。如果我是你,我会转到npm,然后npm install three,然后用var three = require('three');进入。{

关于npm的链接:https://www.npmjs.com/package/three

编辑:您列出的错误意味着根本找不到该模块,这就是为什么我认为它更多地与您所包含的路径以及其他依赖项有关。 NPM安装通常会解决所有问题。然后在您需要的对象上使用该方法,只需执行标准点符号