【问题标题】:How do I export from a namespace, accessing the default? [duplicate]如何从命名空间导出,访问默认值? [复制]
【发布时间】:2026-02-09 11:50:01
【问题描述】:

我有一个关于 ES6 导入模块的问题。

我尝试在我的 Three.js 代码中添加 OrbitControls。 由于 OrbitControls 是一个单独的模块,我需要在我的代码中单独导入它们,如下所示。它工作正常。

import OrbitControls from 'three-orbitcontrols'

但是,

我最初的预期是

import {OrbitControls} from 'three-orbitcontrols'

原因是,
据我了解,如果模块导出某些东西作为导出默认值,
我可以通过在我的“导入”代码中添加花括号来访问它们。
但是,它没有锻炼,所以我认为“三轨道控制”不会默认导出“轨道控制”。

然后我就这样尝试了

import * as Orbit from 'three-orbitcontrols'

new Orbit.OrbitControls(a,b)

然而,它也没有成功。

我误会了什么?

【问题讨论】:

    标签: javascript ecmascript-6 es6-modules


    【解决方案1】:

    导入时使用大括号从另一个文件导入 命名导出。比如下面的链接起来:

    export const foo = 'something';
    
    import { foo } from './somefile.js';
    

    默认导出不使用大括号:

    export default 'somethingelse';
    
    import theSomethingElse from './someOtherFile.js';
    

    听起来OrbitControls 使用默认导出,因此在导入时应避免使用大括号。

    在做

    import * as Orbit from 'three-orbitcontrols'
    

    imports everything 模块作为命名空间导出,它本质上是一个对象。要从命名空间访问默认导出,请访问其上的 default 属性:

    import * as Orbit from 'three-orbitcontrols'
    
    new Orbit.default(a,b)
    

    (或只使用您的原始版本:import OrbitControls from 'three-orbitcontrols'

    【讨论】: