ES Module 的兼容性

367 阅读1分钟
<1> 浏览器环境

平常测试的时候可以在代码中直接引入在线的转译库,实现在线的把 ES6 的代码转化为浏览器可以识别的 JS 代码。

2223.png

但如果是上线的话,就不能这样简单的搞了,因为这是在代码执行时现转的。如果代码量比较庞大的话,就会十分费时,导致效率低下,出现页面卡顿,影响性能!!!

<2> node 环境
(1) 在node 环境使用 ES Module

node 后面的版本内置都支持了 ES Module ,即我们可以在 node 环境中直接使用原生的 ES Module 相关内容。【记得把文件扩展名改为 '.mjs'】

2224.png

直接在终端用 node --experimental-modules index.mjs 即可在 node 的环境下执行该文件!!

注意:

  • 在导入内置模块时:

         - 可以直接 `import {camelCase} from 'fs'` 来进行导入,
         - 【因为内置模块做了兼容,即把它们单独导出了,又把它们整体挂载到一个对象身上默认 default 进行导出】!!!
    
  • 而导入外部模块时:

          - 不可以 `import {camelCase} from 'lodash'` 来进行导入,
          - 【因为外部模块导出时,是把成员们整体挂载到一个对象身上默认 default 进行导出的】
          - 所以只能 `import _ from 'lodash'`
    
(2) ES Module 与 CommonJS的交互

交互规则:

2225.png

(3) ES Module 和 CommonJS的差异

2226.png

  • ES Module 中没有 CommonJS 的一些模块全局成员,但可以通过自己的一些内置模块进行功能替代!!