requirejs 模块化编程

在介绍 require.js 之前,先介绍下 AMD ( Asynchronous Module Definition ), 意思是“异步模块定义”。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。实现 AMD 规范的加载器其实很多,不过多数人还是使用 require.js 。

所以,为避免以下问题而使用 require.js:

1)实现js文件的异步加载,避免网页失去响应;

2)管理模块之间的依赖性,便于代码的编写和维护。

使用说明:

1. require.js 加载

<script src="js/require.js" defer async="true" ></script>

2. 模块调用

(1) 如果我们的代码不依赖任何其他模块,那么我们就没有必要使用 require.js .

(2) 如果我们的代码依赖其他的模块,那么就需要requrie.js , 例如:

require([‘jquery‘, ‘underscore‘, ‘backbone‘], function ($, _, Backbone){
     // code here 主模块代码
});

require.js会先加载jQuery、underscore和backbone,然后再运行回调函数。主模块的代码就写在回调函数中。

3. 模块加载

require.js 在 js 目录下,其他标准库置于 js目录下 lib 文件夹中,自定义模块置于 app 文件夹中。

按微擎系统的js目录结构。使用 require.config() 方法,我们可以对模块的加载行为进行定义。可以将 require.config() 方法置于模块文件头部,或抽离单独的 js文件(config.js)。

require.config({
    paths: {
        "jquery": "lib/jquery.min",
        "underscore": " lib/underscore.min"
    }
}); 

或使用 baseUrl 来改变基路径

 require.config({
    baseUrl: "js/app",  // 设置为自定义模块路径。
    paths: {   // require.js要求,每个模块是一个单独的js文件。
        ‘jquery‘: ‘../lib/jquery-1.11.1.min‘,       // ‘模块名称‘: ’相对 baseUrl 的路径 ‘
        ‘underscore‘: ‘../lib/underscore-min‘,
    }
});

4. 加载非规范模块

require.config({
    shim: {
        ‘colorpicker‘: {
            // (输出的变量名),表明这个模块外部调用时的名称;
            exports: ‘$‘,
            // 依赖项, css! 依赖外部css
            deps: [‘css!../../components/colorpicker/spectrum.css‘]
        },
    }
});

5. 加载插件

require.js还提供一系列插件,实现一些特定的功能。

(1)  domready插件,可以让回调函数在页面DOM结构加载完成后再运行。

require([‘domready!‘], function (doc){
    // called once the DOM is ready
});

(2)  text和image插件,则是允许require.js加载文本和图片文件。

define([‘text!review.txt‘, ‘image!cat.jpg‘], function(review,cat){
    console.log(review);
    document.body.appendChild(cat);
});

其他插件地址:https://github.com/jrburke/requirejs/wiki/Plugins

6. 定义模块

 //  [‘jquery’, ‘underscore’] 数组的元素是 require.config() 中声明的模块名,回调函数中会使用    //  ‘$’ 为 ‘jquery‘ 模块的输出变量,’_’ 为 ’underscroe’模块的输出变量;
 //  $, _ 可以在回调function 中直接使用。
 define([‘jquery’, ‘underscore’], function($, _ ){
    var mod = {};
    // code-segment
    return mod;
});

requirejs 模块化编程

时间: 2024-10-11 01:48:01

requirejs 模块化编程的相关文章

初步理解require.js模块化编程

初步理解require.js模块化编程 一.Javascript模块化编程 目前,通行的Javascript模块规范共有两种:CommonJS和AMD. 1.commonjs 2009年,美国程序员Ryan Dahl创造了node.js项目,将javascript语言用于服务器端编程,这标志”Javascript模块化编程”正式诞生. 在浏览器环境下,没有模块也不是特别大的问题,毕竟网页程序的复杂性有限:但是在服务器端,一定要有模块,与操作系统和其他应用程序互动,否则根本没法编程. node.j

使用requireJS实现模块化编程

RequireJS是一个工具库,主要用于客户端的模块管理.他可以让客户端的代码分成一个个模块,实现异步或动态加载,从而提高代码的性能和可维护性.他的模块管理遵守AMD规范(Asynchronous Module Definition). RequireJS的基本思想就是:通过define方法,将代码定义为模块:通过require方法,实现代码的模块加载. 第一步,将requirejs.js文件使用script标签嵌入到网页,然后即可以使用requireJS进行模块化编程. <script dat

RequireJS和JQuery的模块化编程

基于RequireJS和JQuery的模块化编程 由于js的代码逻辑越来越重,一个js文件可能会有上千行,十分不利于开发与维护.最近正在把逻辑很重的js拆分成模块,在一顿纠结是使用requirejs还是seajs的时候,最终还是偏向于requirejs.毕竟官方文档比较专业嘛...不过即便是有完整的官方文档,仍然遇到不少的问题,比如jquery-ui的使用.下面就循序渐进的讲解一下我遇到的问题,以及解决的办法. 关于AMD和CMD的理解 AMD(异步模块定义)的典型就是requirejs,而CM

从273二手车的M站点初探js模块化编程

前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数据. 273这个M站点是产品推荐我看的.第一眼看这个产品时我就再想他们这个三次加载和翻页按钮的方式,那么小分页的pageIndex是怎么计算的.所以就顺便看了下源码. 提到看源码时用到了Chrome浏览器的格式化工具(还是朋友推荐我的,不过这个格式化按钮的确不明显,不会的话自行百度). 三次加载和分

JS的模块化编程

今天学了一下JS的模块化编程,感觉JavaScript真的是博大精深,CommonJS,requireJS,NodeJS,Seajs,在此记录一下经验.JavaScript设计之初并不是一种模块化编程语言,不支'类'和'模块'的概念,但ES6中却将正式支持"类"和"模块".有了模块,我们可以更方便地使用别人的代码,想要什么功能,就加载什么模块. 不过这样做的前提是大家必须以同样的方式编写模块,考虑到Javascript模块现在还没有官方规范,因此各种规范应运而生.

【模块化编程】理解requireJS-实现一个简单的模块加载器

在前文中我们不止一次强调过模块化编程的重要性,以及其可以解决的问题: ① 解决单文件变量命名冲突问题 ② 解决前端多人协作问题 ③ 解决文件依赖问题 ④ 按需加载(这个说法其实很假了) ⑤ ...... 为了深入了解加载器,中间阅读过一点requireJS的源码,但对于很多同学来说,对加载器的实现依旧不太清楚 事实上不通过代码实现,单单凭阅读想理解一个库或者框架只能达到一知半解的地步,所以今天便来实现一个简单的加载器 加载器原理分析 分与合 事实上,一个程序运行需要完整的模块,以下代码为例: 1

JS模块化编程

js模块化编程演化 博客文章: 1 传统模块化:http://www.ruanyifeng.com/blog/2012/10/javascript_module.html 2 AMD规范:http://www.ruanyifeng.com/blog/2012/10/asynchronous_module_definition.html 3 RequireJs:http://www.ruanyifeng.com/blog/2012/11/require_js.html 现在有两大模块化规范,使用在

【前端编码】模块化编程

摘要: 慢慢开始使用模块化编程,学着使用define,require这类的东西.一开始使用只是单纯觉得页面加载时会立刻请求加载所有文件会影响速度,后面慢慢使用发现,还能解决文件之间的相互依赖关系,解决文件上线版本问题. 再继续发现自己学的还很浅,网上看了这篇文章http://blog.chinaunix.net/uid-26672038-id-4112229.html  深入了解下. 一.为什么要使用模块化编程 1)解耦软件系统的复杂性,使维护“有理可循” 2)定义封装,遵循低耦合高内聚 3)解

前端的模块化编程

对前端模块化的认识一个大型项目时候,通常需要一个团队分工合作,模块化编程就是开发者把逻辑相关的代码放在一个module里面,我们只需要实现核心的业务逻辑,不用担心命名冲突,需要时再加载就可以.Javascript不是一种模块化编程语言,开发者需要模拟出类似的功能,来将一个大程序拆分成相互依赖的小文件,我们称为模块化.有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块. 早期模块化编程的方法 1)函数最早期,我们的函数的功能就是把实现特定逻辑的一组语句打包,在一个文件里面编写