a 1. 模块化
模块化就是指将一个复杂的系统分解到多个模块方便编码,但是在js当中是没有模块体系的,在之前我们实现模块化普遍采用的是命名空间的方式,但是通过这种方式来组织代码会造成以下不好的几点:
- 命名空间冲突,两个库可能会使用同一个名称;
- 无法合理的管理项目的依赖和版本;
- 无法方便的控制依赖的加载顺序。
所以出现了几种模块加载方案,比如CommonJS
和AMD
。
2. CommonJS
CommonJS
是一种使用广泛的JavaScript
模块化规范,核心思想是通过require
方法来同步的加载依赖的其他模块,通过module.exports
导出需要暴露的接口,node
的模块化就是通过CommonJS
实现的。
用法如下:
// 导入
const moduleA = require('./moduleA');
// 导出
module.exports = moduleA;
下面看一下怎么使用:
// a.js
module.exports = '人生不是一蹴而就';
// b.js
let str = require('./a.js');
console.log(str); // 人生不是一蹴而就
通过以上的导入导出方法就可以读取另一个文件中的内容,下面通过简单的实现看一下require
导入的原理,先大概知道个思想,其实就是将a.js
的文件内容引进来了(通过node
中的fs
文件模块),并且用一个闭包包起来,然后执行这个闭包:
// a.js
module.exports = '人生不是一蹴而就';
// b.js
let fs = require('fs');
function req(moduleName) {
let content = fs.readFileSync(moduleName, 'utf8');
// 最后一个参数是函数的内容体 也就是将文件内容用一个闭包包起来
let fn = new Function('exports', 'module', 'require', '