ES6默认和命名导出

mra*_*xus 7 javascript export ecmascript-6 es6-module-loader

我想了解命名和默认导出.我有一个看似基本的要求,我不明白如何设置.

我希望能够同时导入:

//app.js
import Mod from './my-module'
import { funcA, funcB } from './my-module'

console.log('A', Mod.funcA(), funcA()); // A a a
console.log('B', Mod.funcB(), funcB()); // A a a
Run Code Online (Sandbox Code Playgroud)

当我尝试时,我最接近的方法是:

//my-module.js
export function funcA() { return 'a'; };
export function funcB() { return 'b'; };

export default {funcA, funcB}
Run Code Online (Sandbox Code Playgroud)

我的麻烦是我不想重新索引默认导出中的每个函数.我只是想定义我的函数,然后确保它们被导出,所以我可以使用它们.

建议?或者我必须使用import * as Mod from './my-module';

Cod*_*gue 9

您可以省略默认导出并使用import作为语法:

//app.js
import * as Mod from './my-module'
import { funcA, funcB } from './my-module'

console.log('A', Mod.funcA(), funcA()); // A a a
console.log('B', Mod.funcB(), funcB()); // B b b
Run Code Online (Sandbox Code Playgroud)
//my-module.js
export function funcA() { return 'a'; };
export function funcB() { return 'b'; };
Run Code Online (Sandbox Code Playgroud)

  • 它可以*如上所述使用,但我认为没有理由在默认导出中复制`funcA` /`funcB` (2认同)

Ori*_*ori 5

使用以下方法导入整个模块的内容* as name:

import * as Mod from './my-module';
Run Code Online (Sandbox Code Playgroud)

然后使用解构将它们分配给单独的常量:

const { funcA, funcB } = Mod;
Run Code Online (Sandbox Code Playgroud)

要导出,只需使用指定的导出:

export function funcA() { return 'a'; };
export function funcB() { return 'b'; };
Run Code Online (Sandbox Code Playgroud)