Javascript 在main.js中加载OrbitControl时,THREE.js不提供名为EventDispatcher的导出 描述

Javascript 在main.js中加载OrbitControl时,THREE.js不提供名为EventDispatcher的导出 描述,javascript,three.js,Javascript,Three.js,我正试图在我的项目中使用THREE.js中的轨道控件。当我尝试导入OrbitControls对象时,我在Google Chrome DevTools控制台中收到以下错误消息 请求的模块“/three.js”未提供名为“EventDispatcher”的导出 当我手动检查three.js(r119)时,我可以看到它确实在第50631行导出了EventDispatcher 问题:鉴于此信息,我为什么会收到上述错误消息,以及如何解决此问题 HTML main.js 从“/OrbitControls

我正试图在我的项目中使用THREE.js中的
轨道控件。当我尝试导入
OrbitControls
对象时,我在Google Chrome DevTools控制台中收到以下错误消息

请求的模块“/three.js”未提供名为“EventDispatcher”的导出

当我手动检查
three.js
(r119)时,我可以看到它确实在第50631行导出了
EventDispatcher

问题:鉴于此信息,我为什么会收到上述错误消息,以及如何解决此问题

HTML

main.js
从“/OrbitControls.js”导入{OrbitControls}

编辑:多亏了Steve,我的问题的根本原因是我使用了非模块版本的
three.js
,而不是正确版本的
three.module.js
。如果您收到错误消息,请确保您正在下载
three.module.js
文件。

我假设您正在使用中的OrbitControls.js

您正在混合模块库和非模块库。如果您查看
OrbitControls.js

import {
    EventDispatcher,
    MOUSE,
    Quaternion,
    Spherical,
    TOUCH,
    Vector2,
    Vector3
} from "../../../build/three.module.js";
它正在尝试从
。/../../build/three.module.js
导入变量,该变量可能不存在。从您的错误消息中,似乎有人已经将其编辑为“./three.js”,这听起来像是非模块版本

解决 保留引用
  • 将所有
    three.js
    下载到一个文件夹(如
    lib/three
  • (可选)删除不需要的文件
通过以下方式导入:

import { OrbitControls } from './lib/three/examples/jsm/controls/OrbitControls.js';
import * as THREE from './lib/three/build/three.module.js';
仅修改所需的文件 或者,您可以仅下载所需文件并更改引用:

  • 从下载
    three.module.js
  • OrbitControls.js
    中的
    。/../../build/three.module.js
    替换到适当的路径。它应该是
    three.module.js
    OrbitControls.js
  • 删除HTML中的
    标记,因为
    OrbitControls.js
    直接导入它
链接到CDN 或者,您可以直接链接到CDN,如:

import { OrbitControls } from 'https://unpkg.com/three@0.119.1/examples/jsm/controls/OrbitControls.js';
import * as THREE from 'https://unpkg.com/three@0.119.1/build/three.module.js';

这是因为所有必需的文件都由CDN托管,我假设您使用的是中的OrbitControls.js

您正在混合模块库和非模块库。如果您查看
OrbitControls.js

import {
    EventDispatcher,
    MOUSE,
    Quaternion,
    Spherical,
    TOUCH,
    Vector2,
    Vector3
} from "../../../build/three.module.js";
它正在尝试从
。/../../build/three.module.js
导入变量,该变量可能不存在。从您的错误消息中,似乎有人已经将其编辑为“./three.js”,这听起来像是非模块版本

解决 保留引用
  • 将所有
    three.js
    下载到一个文件夹(如
    lib/three
  • (可选)删除不需要的文件
通过以下方式导入:

import { OrbitControls } from './lib/three/examples/jsm/controls/OrbitControls.js';
import * as THREE from './lib/three/build/three.module.js';
仅修改所需的文件 或者,您可以仅下载所需文件并更改引用:

  • 从下载
    three.module.js
  • OrbitControls.js
    中的
    。/../../build/three.module.js
    替换到适当的路径。它应该是
    three.module.js
    OrbitControls.js
  • 删除HTML中的
    标记,因为
    OrbitControls.js
    直接导入它
链接到CDN 或者,您可以直接链接到CDN,如:

import { OrbitControls } from 'https://unpkg.com/three@0.119.1/examples/jsm/controls/OrbitControls.js';
import * as THREE from 'https://unpkg.com/three@0.119.1/build/three.module.js';

这是因为所有必需的文件都由CDN托管

OrbitControls不包含在
'three'
中,而您需要从示例中导入它们,例如:
'three/examples/jsm/controls/OrbitControls
@George Yeah,我应该提到,我已经下载了
OrbitControls.js
,并将其包含在我的项目中。就是那个脚本抛出了错误消息。这很奇怪,因为
three.js
显然导出了
EventDispatcher
,但
OrbitControls.js
似乎没有在itAlso上得到重视,仅供参考,我没有使用捆绑程序。我只是在本地有一个HTML页面和一些JavaScript文件,然后按照我上面所说的导入,而不是直接下载。它可能试图从三个文件夹中导入一些内容,但无法导入,因为它不再位于“示例”文件夹中。请参见从“../../../build/three.module.js”导入{EventDispatcher,MOUSE,Quaternion,Spherical,TOUCH,Vector2,Vector3}的轨道控制第一行
OrbitControls不包含在
'three'
中,相反,您需要从示例中导入它们,类似这样:
'three/examples/jsm/controls/OrbitControls
@George Yeah,我应该提到我已经下载了
OrbitControls.js
,并将其包含在我的项目中。就是那个脚本抛出了错误消息。这很奇怪,因为
three.js
显然导出了
EventDispatcher
,但
OrbitControls.js
似乎没有在itAlso上得到重视,仅供参考,我没有使用捆绑程序。我只是在本地有一个HTML页面和一些JavaScript文件,然后按照我上面所说的导入,而不是直接下载。它可能试图从三个文件夹中导入一些内容,但无法导入,因为它不再位于“示例”文件夹中。请参见从“../../../build/three.module.js”导入{EventDispatcher,MOUSE,Quaternion,Spherical,TOUCH,Vector2,Vector3}的轨道控制第一行
谢谢,我试过了,现在我得到了一个类似的错误,
请求的模块。/three.js不提供名为“MOUSE”的导出。
。我会搜索您的所有文件,查找您从哪里导入的
/three.js
,并将其替换为
/three.module.js
。或者我想你可以把
t重命名