初识模块化AMD和require.js

模块化软件系统通过高内聚、低耦合的模块实现。AMD规范用于异步定义模块,require.js是一个实现AMD的JavaScript加载器,解决了脚本异步加载和依赖管理的问题。使用require.js涉及模块定义、配置路径以及主模块的书写,使得代码组织更加有序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是模块化

模块化是软件系统的属性,这个系统被分解为一组高内聚,低耦合的模块。那么在理想状态下我们只需要完成自己部分的核心业务逻辑代码,其他方面的依赖可以通过直接加载被人已经写好模块进行使用即可。
作为一个模块化系统所必须的能力:
1. 定义封装的模块。
2. 定义新模块对其他模块的依赖。
3. 可对其他模块的引入支持。



如何书写模块

一、函数写法
  function m1(){
    //...
  }
  function m2(){
    //...
  }

函数m1和m2就是两个最原始的模块;但是它的缺点是,函数名高度暴露,污染了全局变量。

二、对象写法
var module = new Object({
     m1: function(){
        //...
     },
     m2: funciton(){
        //...
     }
  })

以上代码完成了模块的书写,调用它们只需要module.m1, module.m2即可。但是,缺点是,对象里面的成员暴露出来了,在对象外部可以任意修改成员的值,例如:

module.m1=function(){
 //...修改原来的方法


三、立即执行函数的写法
var module = function(){
   var m1 = funtion(){
      //...
    };
  var m2 = funtion(){
     //...
    };
  return {
     m1: m1,
     m2: m2
  }
}();

使用模块 new module.m1(); new module.m2();




AMD规范

AMD:Asynchronous Module Definition 异步模块定义;
官方文档 https://github.com/amdjs/amdjs-api/wiki/AMD
语法规范:

require([module],callback)

第一个参数[module],是一个数组,里面的成员就是需要加载的模块。第二个参数callback,则是加载成功之后的回调函数;因为是异步加载,只有当依赖的模块加载完成后,才能运行后面的回调函数,所以适合浏览器环境,浏览器加载模块的速度往往取决于网速,所以比较慢,需要异步加载才行。




require.js

RequireJS 是一个JavaScript模块加载器。它非常适合在浏览器中使用,但它也可以用在其他脚本环境,就像 Rhino and Node。使用RequireJS加载模块化脚本将提高代码的加载速度和质量。

在没有出现require.js之前,在html中引入js需要很多script标签,就像下面,不仅不便于书写起来繁杂,并且为了保证模块加载的顺序正确,必须保证依赖越多的js文件放在后面。

  <script src="1.js"></script>
  <script src="2.js"></script>
  <script src="3.js"></script>
  <script src="4.js"></script>
  <script src="5.js"></script>
  <script src="6.js"></script>

然而,require.js的出现解决以上问题,它具有以下两个优点:

实现js的异步加载,避免网页失去响应。
管理模块之间的依赖性,便于代码的编写和维护。




require.js的使用


step1、引入require.js文件

从官网下载require.js文件 http://requirejs.org/,然后再html中引入,注意要在body最底部引入,或者在script标签中加入defer async=”true”

<script data-main="script/main.js" src="script/require.js"></script>


step2、模块的定义

require.js模块定义的规则符合AMD规范;
define()的第一个参数是一个数组,是依赖模块;第二参数是回调函数,当依赖加载完成后才能运行;

define(['module1'], function(m1){
    m1.doSomeThing();//...参数m1为加载的依赖模块'module';
}


step3、主模块的书写

<script data-main="script/main.js" src="script/require.js"></script>

这里面的main.js文件,我把它称为”主模块”,意思是整个网页的入口代码;书写规则如下:

//main.js
require.config(
    paths:{jquery:'jquery-1.8.3.min'}
});
require(['jquery','window'], function($,w){
    $("#a").click(function(){
       new w.Window().alert('shaojinghong',function(){
        alert('button is clicked');
       });
    });
});
  • require.config(
    paths:{jquery:’jquery-1.8.3.min’}
    });将模块名和文件名关联起来,前提是main.js和jquery-1.8.3.min.js 在一个文件夹下;

  • 如果模块和main.js不在同一个文件下,可以使用

  require.config({
    paths: {
      "jquery": "lib/jquery.min"
      }
  • 如果模块在cdn中,可以使用:
  require.config({
    paths: {
      "jquery": "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min"
    }
  });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值