2017-02-11 5 views
2

Nachdem ich threejs von node_modules habe ich mich entschieden, den OBJLoader sie verwenden, aber ich bekomme einen unerwarteten Fehler.erfordert nicht funktioniert wie erwartet

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

Im Innern des OBJLoader:

THREE.OBJLoader = function (manager) 

es mir die Drei in dem OBJLoader erzählt ist nicht definiert, obwohl ich es gerade oben erforderlich. Was kann ich tun, wenn ich versuche, Dateien auf diese Weise zu erstellen?

+0

Wie erstellen Sie Ihren Code? Browserifizieren, Webpack usw.? –

Antwort

3

Aufgrund three.js und vor allem den Code aus es Beispiele für die globale Variable unter Berufung THREE definiert ist, ist es ein bisschen solche zu verwenden, mit browserify und Größen wie kompliziert.

Was ich vor allem in browserify-Projekten tat, war eine Datei three-loader.js die wie folgt aussieht zu erstellen:

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; 

Und überall im Projekt Verwendung const THREE = require('./three-loader'); statt require('three');.

Eine weitere Möglichkeit besteht darin, die Dateien aus dem Ordner examples in Ihr Projekt zu kopieren und eine Zeile const THREE = require('three'); an den Anfang dieser Dateien einzufügen.

-1

Dies liegt daran, dass Sie ein Knotenmodul laden möchten, das nicht installiert wurde. Manchmal sind auch andere mit dem Modul verbundene Abhängigkeiten nicht installiert und können zum Fehlschlagen führen. Wenn ich du wäre, würde ich nach npm gehen und einfach npm install three machen und es dann mit var three = require('three'); anfordern.

-Link auf der npm: https://www.npmjs.com/package/three

Edit: Der Fehler bedeutet aufgeführt, dass das Modul nicht überhaupt gefunden zu werden, das ist, warum ich glaube, es ist mehr mit dem Weg zu tun, die Sie mit und vielleicht auch andere Abhängigkeiten wie Gut. NPM Installation wird normalerweise alles reparieren. Und dann, um die Methode für das Objekt, das Sie benötigen, verwenden Sie einfach Ihre Standard-Punktnotation

+0

Threejs ist bereits in meinem node_modules –

0

Die Datei three/examples/js/loaders/OBJLoader.js ist nicht erforderlich - es gibt keine module.exports. Es ist immer noch möglich require die Datei, wie Sie es tun, aber es wird nur versuchen, den Code im Kontext dieser Datei auszuführen - und im Kontext dieser Datei gibt es keine Variable THREE definiert. Die fragliche Datei wurde entworfen, um in den Browser geladen zu werden, wo eine Fenster-/globale Variable THREE definiert wurde.

Three.js ist eine Client-seitige Bibliothek - in Browser laden Sie ein Skript-Tag verwenden:

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

, dass eine Variable THREE in Ihrem Browser etablieren wird, so dass Sie dann das Beispiel laden OBJLoader.js über:

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

so kann ich noch drei verlangen aber laden Sie den Objloader in der HTML? –

+0

Warum verwenden Sie 'require' für three.js? es ist clientseitige Bibliothek? – hackerrdave

Verwandte Themen