模块化
一、模块化规范
规范
导出(定义)
导入(引用)
代表(实现)
加载方式
使用环境
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