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

时间:2019-11-26 19:03:33

标签: javascript node.js typescript commonjs

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

  • CommonJS
  • ES5
  • ES6
  • NodeJS
  • 打字稿

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

1 个答案:

答案 0 :(得分:7)

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

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

在某些用例中,ES2015的静态语法不能完全解决问题,因此import() (dynamic import) proposal在某些环境中已经受支持,并且将在ES2020中使用。