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

在我需要node_modules中的threejs之後,我決定使用它們提供的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');需要它。

鏈接上NPM:https://www.npmjs.com/package/three

編輯:您列出的錯誤意味着模塊沒有被發現在所有的,這就是爲什麼我認爲這更多的是與你包括,也許其他依賴的路徑好。 NPM安裝通常會解決所有問題。然後在您需要的對象上使用該方法,只需執行您的標準點符號

+0

Threejs已經在我的node_modules –

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> 
+0

所以我仍然可以要求三個,但在html中加載objloader? –

+0

你爲什麼在three.js中使用'require'?它是客戶端庫? – hackerrdave