简单理解 ES6 module 和 Node.js module

2018-07-28  本文已影响0人  YeLqgd

先给 module 在网上找个自己感觉妥当的定义,module: 开发者将程序分解成离散功能块,这些功能块就称为 module。

在 Node.js 里每个 .js/.json/.node 文件就是一个 module(后面专指 .js 的 module),每个 module 通过 module.exports 来导出;在其他 module 里通过 require(modulePath) 来引入别的 module 的 module.exports
这里厘下原先让自己疑惑的几个点:

ES6 的 module,与 Node.js 里的 module 的概念基本相同,都是一个文件对应一个 module,只不过这里的文件只包含 .js 的文件。这里只简单介绍 import 和 export 的基本用法,其余冗杂或稍微者深层次的东西,下次。

import 和 export 的基本用法就是上面这些。除此之外,export 还有些简便的写法,称之为 Re-exporting,这适用于一个文件里将所有 module 的 export 统一到这个文件夹下的 index.js 的文件中的情形,这有利于确定一个模块的边界,所有的对外提供的东西只在文件夹下的 index.js 文件中呈现。比如我们现在一个 util 文件夹,里面有 moduleA export { a },moduleB export { b } 和一个 index.js 文件,为了把 a 和 b 对外呈现,那我们在 index.js 中会这样写

import { a } from './moduleA'
import { b } from './moduleB'

export { a ,b }

那有了 Re-exporting 之后,可以写成

export { a } from './moduleA'
export { b } from './moduleB'

这样会少些一行,但我想好处应该不只是少些一行这么简单吧,我记得在哪里看到两者好像是有点区别的。当然不止是 named export/import 可以这样, default import/export 也可以这样,这样除了上面的 named import -> named export 的组合之外还有三种组合

关于 ES6 import/export 的基本用法就这些了,掌握了应该就差不多能应付日常的需要,但是如果想知道一些「为什么」以及「有什么用」的知识,这点肯定不够的,比如 ES6 module 和 Node.js module 的异同、各自产生的历史原因也就是 JavaScript 模块化的演进、了解关于 dynamic import 的提案、webpack 的 Tree Shaking 和 dynamic load 的原理等等等等就要花更多功夫啦。

参考链接:

上一篇 下一篇

猜你喜欢

热点阅读