Commonjs 和 Es6 Module区别

216 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

CommonJS规范 :nodejs 默认支持的

  • CommonJS规范只有两句话
  1. 模块必须使用 require() 导入

  2. 模块必须要使用 module.exports 导出

      这两个语法都是nodejs环境自带的全局语法
    
  • exports与module.exports区别

    • (1)如果分不清两者区别,就使用 module.exports
    • (2)exports不能去修改堆地址,只能往堆地址里面加数据
      • 错误写法: exports = { name:'张三' }

      • 这样写是修改堆地址

      • 正确写法: exports.name = '张三'

      • 这样写没有修改堆地址,而是往堆地址中加数据

1653186538451.png

1653153676888.png

  • 1.导出模块语法一般放在js文件最底部,且只需要执行一次即可
  • 2.开发中,并不需要把模块化中所有的变量全部都导出,只需要暴露别人需要用的变量即可

ES6官方模块化规范

默认导出导入

默认导出的语法: export default 默认导出的成员 默认导入的语法: import 接收名称 from 模块路径

Snipaste_2022-05-25_20-38-31.png

注意:

1.每个模块中,只允许使用唯一的一次 export default

2.默认导入时的接收名称可以任意名称,只要是合法成员名称即可

按需导入

按需到考入的语法 : export const s = 10 按需导入的语法 : import{按需导入的名称} from 模块路径

Snipaste_2022-05-25_20-45-01.png

注意:

1.每个模块中可以有多次按需导入

2.按需导入的成员必须和按需导出的名称保持一致

3.按需导入是,可以使用as关键字进行重命名

区别总结

Commonjs 的特性如下:

CommonJS 模块由 JS 运行时实现。

CommonJs 是单个值导出,本质上导出的就是 exports 属性。

CommonJS 是可以动态加载的,对每一个加载都存在缓存,可以有效的解决循环引用问题。

CommonJS 模块同步加载并执行模块文件.

Es6 module 的特性如下:

ES6 Module 静态的,不能放在块级作用域内,代码发生在编译时。

ES6 Module 的值是动态绑定的,可以通过导出方法修改,可以直接访问修改结果。

ES6 Module 可以导出多个属性和方法,可以单个导入导出,混合导入导出。

ES6 模块提前加载并执行模块文件,ES6 Module 导入模块在严格模式下。

ES6 Module 的特性可以很容易实现 Tree Shaking 和 Code Splitting。