一、模块化开发
- 定义:具有相同属性和行为的事物的集合
- 在前端中,将一些属性比较类似和行为比较类似的内容放在同一个
文件里面,把这个js
文件称为模块js
- 目的:为了每个
文件只关注与自身有关的事情,让每个js
文件各行其职js
- 模块化:指的就是遵守
规范,解决不同commonjs
模块之间相互调用问题js
- CommonJS:
-
文件中调用另一个A.js
文件,一定要在B.js
中引入A.js
B.js
require("B.js");
- 另一个被调用的
,也就是js
一定要对外提供接口。B.js
module.exports=B;
B.js
var b = "Hello,I'm module B.";
module.exports = b;//暴露一个接口,与b对接。这个接口既可以是函数,也可以是对象,甚至是数组。
A.js
- 模块间相互调用,协同工作,实现某特定功能。
- AMD规范:
异步模块声明Async Module Define
- CMD规范:
公共模块声明Common Module Define
- 模块化的核心价值:模块化最核心的价值在于解决不同文件之间的分工和调用问题,即依赖关系。
-
和requireJS
都是在前端实现模块化,相当于一个前端的SeaJS
模块化加载器,和js
不一样,webpack
是通过webpack
将文件打包的。nodejs
二 、 ES6模块和 CommonJS 模块有哪些差异?
-
模块是运行时加载,CommonJS
ES6
模块是编译时输出接口。
2.
模块输出的是一个值的拷贝,CommonJS
模块输出的是值的引用。ES6
-
模块自动采用严格模式,无论模块头部是否写了ES6
"use strict";
-
可以做动态加载,require
语句做不到,import
语句必须位于顶层作用域中。import
-
模块的输入变量是只读的,不能对其进行重新赋值。ES6
- 当使用
命令加载某个模块时,就会运行整个模块的代码。require
- 当使用
命令加载同一个模块时,不会再执行该模块,而是取到缓存之中的值。也就是说,require
模块无论加载多少次,都只会在第一次加载时运行一次,以后再加载,就返回第一次运行的结果,除非手动清除系统缓存。CommonJS