2017-02-11 27 views
2
var THREE = require('three'); 
require('three/examples/js/loaders/OBJLoader.js'); 

После того, как мне потребовалось трижды от node_modules, я решил использовать OBJLoader, который они предоставляют, однако я получаю непредвиденную ошибку.не должны работать должным образом

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

Внутри OBJLoader:

THREE.OBJLoader = function (manager) 

он говорит мне Три внутри OBJLoader не определен, хотя я требовала чуть выше. Что делать, если вы пытаетесь потребовать файлы таким образом?

+0

Как вы строите свой код? Browserify, Webpack и т. Д.? –

ответ

3

Благодаря three.js и особенно код от его примеры, опираясь на глобальную переменную THREE определяется, это немного сложно использовать те с browserify и любит.

То, что я в основном делали в browserify-проектов было создать файл 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');.

Другой вариант - скопировать файлы из папки примеров в ваш проект и добавить строку const THREE = require('three'); в начало этих файлов.

-1

Это потому, что вы пытаетесь загрузить модуль узла, который не был установлен. Иногда и другие зависимости, связанные с модулем, не были установлены и могут привести к сбою. Если бы я был вами, я бы отправился на npm и просто сделал npm install three, а затем потребовал его с var three = require('three');.

Ссылка на НОМ: https://www.npmjs.com/package/three

Edit: Ошибка вы перечислили означает, что модуль не найден вообще, поэтому я думаю, что это больше связаны с путем вы в то числе и, возможно, другие зависимости, как Что ж. Установка NPM будет исправлять все как обычно. И затем, чтобы использовать метод на объекте, в котором вы нуждаетесь, просто сделайте стандартную точечную нотацию

+0

Тройка уже находится в моем node_modules –

0

Файл three/examples/js/loaders/OBJLoader.js не должен требовать - нет module.exports. По-прежнему возможно require файл, который вы делаете, однако он просто попытается выполнить код в контексте этого файла - и в контексте этого файла нет переменной THREE. Этот файл был спроектирован для загрузки в браузере, где была определена переменная window/global THREE.

Three.js библиотека на клиентской стороне - для загрузки в браузере вы можете использовать тег сценария:

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

Это установит переменную THREE в вашем браузере, так что вы можете загрузить пример OBJLoader.js через:

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

, поэтому я все еще могу потребовать три, но загружать objloader в html? –

+0

Почему вы используете 'require' для three.js? это клиентская библиотека? – hackerrdave