为什么有不同的方式在JavaScript中导入模块?

MM.*_*MM. 3 javascript commonjs node.js typescript

我不确定在以下情况下导入JavaScript模块之间的区别:

  • 普通JS
  • ES5
  • ES6
  • 节点JS
  • 打字稿

为什么有这么多种方式导入javascript模块?在不同的实现中,“模块”的定义是否有所不同?是否都在做同一件事,但语法不同?

T.J*_*der 8

ES5及更早版本中没有模块。由于当时JavaScript中没有标准的模块系统,因此创建了各种模块系统(CommonJS,AMD以及Node.js和TypeScript中的类似CommonJS的系统),但这是一件非常有用的事情。因此,工具和工具构建者满足了需求。

ES2015(又名“ ES6”)为JavaScript中的模块创建了标准语法,现已被所有现代浏览器,Node.js和TypeScript所采用。该标准语法将模块标识符的语义留给主机环境使用,因此Web社区的领导者必须就如何在浏览器中进行操作达成共识(而Node.js必须弄清楚如何在Node.js中做到这一点)。等等),因此在ES2015发布与您能够以本机使用该语法之间有一些延迟(尽管Webpack,Rollup等可以处理)。

在某些用例中,ES2015的静态语法不能完全解决问题,因此存在import()(动态导入)建议,该建议已在某些环境中得到支持,并将在ES2020中使用。