js的模块化javascript
在前端开发的原始时期,只要在script标签中嵌入js代码就能实现一些基本的交互效果,可是随着时代的进步。js扮演的角色变得重要起来,js应用的场景页愈来愈复杂,。然而,js都没有类的概念,更不用说模块了。前端
为何要有模块化java
当一个项目变得复杂的时候,会出现问题,好比:
命名冲突:开发中重复命名,致使命名冲突。
文件依赖:项目开发中,依赖的js文件,引入遗漏,引入顺序错误。es6
使用模块化开发能够避免相似状况,并且利于项目的维护:
提高开发效率:代码方便重用,能直接引入,避免重复开发。
方便后期维护:维护起来文件依赖和结构清晰数组
AMD
AMD 英文Asynchronous Module Definition,中文“异步模块定义”。它是一个在浏览器端模块化开发的规范。AMD规范的主要实现是RequireJs浏览器
define(id?, dependencies?, factory) id:指定义中模块的名字(可选)。若是没有提供该参数,模块的名字应该默认为模块加载器请求的指定脚本的名字。若是提供了该参数,模块名必须是“顶级”的和绝对的(不容许相对名字)。 dependencies:当前模块依赖的,已被模块定义的模块标识的数组字面量(可选)。 factory:一个须要进行实例化的函数或者一个对象。
define("alpha", ["require", "exports", "beta"], function (require, exports, beta) { exports.verb = function() { return beta.verb(); //Or: return require("beta").verb(); } });
CMD
CMD 英文 Common Module Definition。CMD 依赖就近。CMD规范的主要实现是SeaJs服务器
define(function(require, exports, module){ 模块代码 });
commonjs
CommonJS是服务器端模块的规范,Nodejs使用该规范。
CommonJS定义,一个单独的文件就是一个模块。每个模块都是一个单独的做用域,在该模块内部定义的变量,没法被其余模块读取,除非定义为global对象属性。
经过 require 来加载模块。
commonJs经过 exports 和 modul.exports 来暴露模块中的内容。异步
es6的module 语法
一个模块就是一个独立的文件。该文件内部的全部变量,外部没法获取。
export 命令用于规定模块的对外接口。
import 命令用于输入其余模块提供的功能。模块化
// profile.js export var firstName = 'Michael'; export var lastName = 'Jackson'; export var year = 1958; // main.js import {firstName, lastName, year} from './profile'; function setName(element) { element.textContent = firstName + ' ' + lastName; }