ES6模块与揭示模块模式

6

1. ES6模块与使用IIFE和闭包实现的模块模式有何不同? 2.哪个应该优先选择?能否通过示例进行说明?


可能是什么是浏览器化/ requirejs模块和ES6模块之间的区别的重复问题。 - try-catch-finally
IIFEs是穷人的模块。它们不能处理依赖关系,污染全局命名空间以进行互操作。您可以选择任何有关ES模块的良好阅读材料,并估计其中多少适用于IIFEs。 - Estus Flask
1个回答

3
揭示模块模式基本上是一种在 ES5 环境中发明的酷炫技巧,用于使某些东西类似于模块。如果您处于可以使用 ES6 模块的环境中,应改用这些模块。
如果您不在可以使用 ES6 模块的环境中,则应使用 ES6 转译器(例如 Babel)将模块化源代码编译为可在目标环境中使用的格式。
一份简短的差异列表:
  • ES6 模块具有导入和导出语法
  • ES6 模块具有命名导出和默认导出,如果您只想公开一个类(或其他内容)。
  • ES6 模块导入在解析时静态分析。如果尝试导入不存在的属性,则会报错。
  • ES6 模块导入是原始变量的“视图”,而不是赋值。(某些转换器可能不支持此功能。)

ECMAScript 6 modules: the final syntax 是关于 ES6 模块工作方式的非常好的摘要。

*截至 2017 年 9 月,Node 不支持 ES6 模块。虽然某些浏览器支持它,但还没有主要库利用它。

**它讨论的浏览器 API,System.import,不是最终实现的方式。


截至2017年9月,Node不支持ES6模块。嗯,现在推荐的方法是什么?我正在使用Gulp(如果有影响)和Babel。我正在尝试决定一种结构化/可重用代码的方法,但我有点迷失。现在是否有一种“约定俗成”的方法来使用ES6/模块/Babel?我正在开发的Web应用程序非常庞大,因此需要一个良好的代码结构。 - dmathisen
对于您的应用程序的内部模块,请使用像Rollup或Webpack这样的转换和捆绑工具。如果您要将模块发布到npm,则不知道最佳选择是什么。@std/esm似乎很有前途,但我自己没有使用过。 - Sean McMillan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接