当 require.js 加载 Three.js 时,三是 'undefined'(修订版 =80)

THREE is 'undefined' when require.js loading Three.js (revision=80)

require.config({
baseUrl:'resource',
paths:{
    'three': 'lib/threeJS/three.min',
    'OrbitControls': 'lib/threeJS/OrbitControls'
},
shim:{
    'OrbitControls': {
        deps: ['three'],
        exports:'OrbitControls'
    }
}    
});
require(['OrbitControls'],function (OrbitControls) {
});

我的测试代码如上所示,当我调试这段代码时,控制台输出

THREE is 'OrbitControls.js:16 Uncaught ReferenceError: THREE is not defined(…)'.

但是Three.js(revision=75)没有问题。所以我查看了three.js的源代码,发现了一些不同之处。最重要的一个是不同的调制方法。 Three.js(修订版 = 80)开始于:

(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global.THREE = global.THREE || {})));
}(this, (function (exports) { 'use strict';

所以谁能告诉我如何用 require.js 添加这个版本的 three.js?另外,我的require.js是ver. 2.1.19

你必须在 path: 上定义 js 的路径我想你已经写了 js 名称。请更改它,然后在 shim 标签中使用它的名称加载 js。

另请参阅 hear

中的代码

在使用之前附加此代码后是正确的:

define('three', ['../js/lib/threejs/three.82.min'], function ( THREE ) { window.THREE = THREE; return THREE; });