ES6的惯用揭示模块模式

时间:2017-05-16 16:02:57

标签: javascript es6-modules

过去我曾使用revealing module pattern

function myModule() {
  function foo() ...
  function bar() ...

  return { 
    foo: foo, 
    bar: bar
  };
}

使用ES6,用对象速记改进了这一点。

function myModule() {
  function foo() ...
  function bar() ...

  return { foo, bar };
}

现在有了内置的模块语法,我很难找到与上述类似的首选模式。

选项#1名为exports

// export file
function foo() ...
function bar() ...

export { foo, bar };

// import file
import { foo, bar } from './export-file';

foo();
bar();

选项#2默认导出/导入与解构

// export file
function foo() ...
function bar() ...

export default { foo, bar };

// import file
import baz from './export-file';

const { foo, bar } = baz;

foo();
bar();

选项#3默认导出/导入,名称间距

// export file
function foo() ...
function bar() ...

export default { foo, bar };

//import file
import baz from './export-file';

baz.foo();
baz.bar();

我喜欢选项#1和指定的导出,因为它在" destructuring"中提供了简单性。导入语法。

import { foo, bar } from './export-file';

我还想继续在导出对象的导出文件底部明确定义模块的导出API。

export { foo, bar };
// OR
export default { foo, bar };

我一直读到默认导出是首选的,所以我一直试图找到一个包含默认导出的首选模式,但是我不愿意采用,因为它看起来更加冗长优点(除了需要名称间距,或在某些情况下包含命名和默认导出)。

是否存在使用ES6模块语法显示模块模式的惯用模式?

1 个答案:

答案 0 :(得分:12)

  

我一直读到默认导出是首选的

不,他们不是。它们更简单,语法更短,可能会更频繁地使用(因为有更多的小型单导出模块),但它们通常不是首选。

使用正确的工具完成工作。你已经知道了你想要的优势。

  

是否存在使用ES6模块语法显示模块模式的惯用模式?

是,选项#1。如果要导出多个内容,请始终使用命名导出。

您可以从挑剔的语法

中获得明确的别名和树震动
import { foo, bar } from './export-file';

以及命名空间

import * as baz from './export-file';