模块化

一、模块化规范

规范导出(定义)导入(引用)代表(实现)加载方式使用环境

CommonJS

module.exports/exports

require

Node.js

同步,动态(运行时)

服务器、桌面

AMD

define

require

RequireJS

异步

浏览器

CMD

define

require

Sea.js

异步

浏览器

ES6 Module

export/export default

import from

-

同步,静态(编译时)

服务器、浏览器(需要转译才支持)

二、CommonJS 与ES6 Module的区别

1、语法

  • CommonJS:

    • 导出:module.exports/exports

    • 导入:require

  • ES6 Module:

    • 导出:export(default)

    • 导入:

      • import..from…

      • import():新提案,动态导入新提案,适用场景:按需加载,条件加载,模块路径变量

2、运行环境

原生支持,无需编译的情况下:

  • CommonJS:服务器

  • ES6 Module:浏览器

3、加载方式

  • CommonJS:动态加载(运行时加载)

  • ES6 Module:静态加载(编译时加载;必须先于其他语句执行,只能模块顶层,不可放到if语句中)

4、变量

  • CommonJS:值拷贝(不会变)

  • ES6 Module:值引用(会变,单例

5、是否可修改

  • CommonJS:可修改

  • ES6 Module:不可修改(因为是值引用,如果修改,会引起其他模块的运行时拿到的不再是期望值)

参考:

Last updated