前端模块化(AMD、CMD、commonJs、ES6)

为什么需要模块化?

1.没有模块化的项目,通常需要在一个页面里引用多个<script>文件,分类性不强,不易维护,较多script时,可能会同名变量。。
2.一个复杂的项目肯定有很多类似的功能,将独立的功能按规范封装成一个个独立的模块,并且可以被其他模块引用。
3.常用的javascript模块化规范有四种:AMD,CMD,CommonJs,ES6模块化。

AMD和CMD的区别?

AMD是基于RequireJs(需要引入require.js)的规划范写的,它是通过define()函数来定义,第一个参数是数组,里面是一些需要依赖的包,第二个参数是一个回调函数,通过变量来引用模块,和前面的数组一一对应。
特点:异步加载,依赖前置。

define(['package/lib'],function(lib){
   var msg = lib();
   console.log(msg)
})

CMD是是基于SeaJs(需要引入sea.js)的规范化写的,它也是通过define(function(require,exports,moudle){})定义,通过require()来加载模块,在什么地方使用模块就在什么地方require()该模块,即用即返。
特点:异步加载,就近依赖。

define(function(require,exports,moudle){
   const lib = require(/package/lib);
   var msg = lib();
   console.log(msg)
})

CommonJs和ES6模块化的区别?

1.CommonJs模块引入方式使用require(),导出的方式是module.exports=value或exports.xx=value
ES6使用import {} from(必须放在文件开头)和export let/const或export {}引入和导出。
2.CommonJs模块输出的是一个值的拷贝
ES6输出的是值的引用

//CommonJs   值拷贝
var a = 1;
function add(){
    a ++;
}
moudle.exports = {
    a: a,
    /*get a(){
        return a;
    }*/
    //改成这样add方法会为2
    add: add
}

var mod = require('./lib');
console.log(mod.a);   //1
mod.add();
console.log(mod.a);   //1   输入时必须查找对象属性,已经加载的值还是会拷贝exports中的a,所以还是1
//ES6    值引用
export var a = 1;
export var add = ()=>{
   a++;
}

import { a,add } from './lib'
console.log(mod.a);   //1
mod.add();
console.log(mod.a);   //2   //值的引用,当值发生改变时,输出的值也会同步变化。

3.CommonJs模块是运行时加载,加载的是一个对象(exports或module.exports)。
ES6模块是编译(将import语法转化为require)时加载的,效率更高,不是对象,它的对外接口是一种静态定义,只有在脚本使用时才会调用。
ES6渐渐取代CommonJs

参考:https://juejin.cn/post/6844903717947310093#heading-4

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
模块化是一种将程序中的代码按照一定的规则拆分成独立的模块,使得代码的维护和复用更加方便的技术。在 JavaScript 中,有三种常见的模块化规范:CommonJSAMD(Asynchronous Module Definition)和CMD(Common Module Definition)。 CommonJS 是 Node.js 默认的模块化规范,它主要用于服务器端的 JavaScript 开发。它定义了一个 require 函数来加载模块,一个 exports 对象来导出接口,并支持模块的循环依赖。CommonJS 规范的代码示例: ```javascript // 导出模块 exports.add = function (num1, num2) { return num1 + num2; } // 加载模块 var math = require('math'); console.log(math.add(2, 3)); ``` AMD 是一种异步加载模块的规范,主要用于浏览器端的 JavaScript 开发。它需要使用一个专门的模块加载器来异步加载模块,比如 requirejs。 ```javascript // 定义模块 define(['jquery'], function ($) { function add(num1, num2) { return num1 + num2; } return { add: add } }); // 加载模块 require(['math'], function (math) { console.log(math.add(2, 3)); }); ``` CMD 是另一种异步加载模块的规范,与 AMD 类似,也需要使用一个专门的模块加载器来异步加载模块,比如 sea.js。 ```javascript // 定义模块 define(function (require, exports, module) { var $ = require('jquery'); function add(num1, num2) { return num1 + num2; } exports.add = add; }); // 加载模块 seajs.use('math', function (math) { console.log(math.add(2, 3)); }); ``` 总的来说,CommonJS 主要用于服务器端的 JavaScript 开发,AMDCMD 主要用于浏览器端的 JavaScript 开发,它们都帮助我们更好地组织和复用代码。同时,由于 ECMAScript 6 以后原生支持模块化,使用 import 和 export 关键字即可实现模块化编程,更加简洁方便。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值