模块化

106 阅读1分钟

概述

在 ES6 之前,最主要的有CommonJS和AMD两种。
前者用于服务器,后者用于浏览器。ES6在语言标准的层面上,实现了模块功能

区别

ES6 模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。
CommonJS和AMD模块,都只能在运行时确定这些东西,
CommonJS模块就是对象,输入时必须查找对象属性
// CommonJS模块  运行时加载:整体加载fs模块,生成_fs,再从这个对象上面读取
//只有运行时才能得到这个对象,导致完全没办法在编译时做“静态优化”
let { stat, exists, readfile } = require('fs');

// 等同于
let _fs = require('fs');
let stat = _fs.stat;
let exists = _fs.exists;
let readfile = _fs.readfile;
ES6 模块不是对象,而是通过export命令显式指定输出的代码,再通过import命令输入.
编译时加载”或者静态加载,即 ES6 可以在编译时就完成模块加载,
效率要比 CommonJS 模块的加载方式高
//从fs模块加载 3 个方法,其他方法不加载

import { stat, exists, readFile } from 'fs';

Notice:ES6 模块之中,顶层的this指向undefined