存在问题
three@0.129.0版本的轨道控制器类是在three/examples/js/controls/OrbitControls.js文件中定义的
// file: three/examples/js/controls/OrbitControls.js
(function() {
    // ...
    THREE.OrbitControls = OrbitControls;
})()
复制代码而当我们使用webpack+ES6模块化开发的时候:
import * as THREE from 'three';
import 'three/examples/js/controls/OrbitControls';
复制代码控制台会报错Uncaught ReferenceError: THREE is not defined,说THREE变量没有定义,因为OrbitControls.js文件中使用的THREE是全局的,而我们全局并没有这个属性。

解决方案
借助imports-loader,在three/examples/js/controls/OrbitControls.js文件中注入import * as THREE from 'three'.
    npm i imports-loader -D
复制代码下载后,对webpack.config.js文件进行修改,在module.rules中添加匹配规则
{
    ...
    module: {
        ...,
        rules: [
            {
              test: require.resolve('three/examples/js/controls/OrbitControls'),
              use: [
                {
                  loader: 'imports-loader',
                  options: {
                    imports: [
                    // namespace three THREE' 注入规则请自行前往https://www.npmjs.com/package/imports-loader 查看
                      'namespace three THREE'
                    ]
                  }
                }
              ]
            },
        ]
    }
}
复制代码重新编译之后就能愉快的使用OrbitControls插件了。


注意
当你项目依赖的webpack版本与imports-loader版本不兼容时,会出现下面这种情况:

解决方法
升级webpack版本,或者降低imports-loader版本
复制代码疑问
如何知道loader对应的webpack版本呢?有没有知道的评论区告诉我一下。谢谢!!!
复制代码© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
    






















![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)
