ES6模块+显示模块模式

时间:2017-12-07 21:16:36

标签: javascript

我刚刚开始使用es 6模块进行前端开发(我们根本不使用Node),我想知道这种模式我们是否有任何陷阱或者是否有任何陷阱你有任何改进建议。我猜它在es6模块中使用了揭示模块模式背后的一些基本原理。我问这个问题是因为大多数es6模块"如何引导"我已经看到做了不同的事情,我会在问题的最底部注意到这一点。

有些注意事项:

  • 我们(很确定我们)希望每个模块只导出一件事。这被列为Airbnb风格指南中的最佳实践,我们在使用npm软件包时发现它总体上很不错
  • 我们非常喜欢用" public"命名方法。和#34;私人" (我们应该使用_作为私有方法,因为这是最新的最佳实践),这样可以很容易地看到模块外面的内容。

module.js:

// publicly available method
function publicHello() {
    return 'Hello';
};

// publicly available method
function publicHelloWorld(){
    const a = publicHello();
    const b = privateProcessWorld(a);
    return b;
};

// private method
function privateProcessWorld(x) {
    return x + ' world';
};


// create an object to export, containing only the public methods
// note that we rename them here as well, making them easier to consume
const exp = {
    h: publicHello,
    hw: publicHelloWorld,
};

// export the object as default so it can be used in an unnamed import
export default exp;

使用模块:

import whatever from "module.js";

whatever.h();   // "Hello"
whatever.hw();  // "Hello world"

我在大多数" es6模块中看到的如何"指南是这样的:

var utils = {
  generateRandom: function() {
    return Math.random();    
  },
  sum: function(a, b) {
    return a + b;
  }
};

export default utils;

1 个答案:

答案 0 :(得分:2)

  

我们(很确定我们)希望每个模块只导出一件事。

没有。不要这样做。如果你的模块提供了多种功能,比如一堆辅助函数,并且不提供单个函数或单个类或其他东西,你还应该导出多个东西。

只需将默认导出更改为

即可
export {
  publicHello as h,
  publicHelloWorld as hw,
}

并导入

import * as whatever from "module.js";