##1.javascript模块规范

  • ###CommonJS

    主要用于服务器端编程,比如node.js的模块系统,就是参照CommonJS规范实现的。在CommonJS中,有一个全局性方法require(),用于加载模块。

    引用一段代码:

      // package/lib is a dependency we require
    var lib = require( "package/lib" ); // behavior for our module
    function foo(){
    lib.log( "hello world!" );
    } // export (expose) foo to other modules as foobar
    exports.foobar = foo;

    注释也很清楚,但是这里面有个很大的问题,不适用于浏览器环境。当需要用到log方法时候必须等待依赖模块lib加载完毕,整个应用将会停滞,因此浏览器环境不能使用commonjs规范,只能采用异步加载,即下面将要引出的AMD规范。

  • ###AMD

    AMD是"Asynchronous Module Definition"的缩写,意思就是"异步模块定义"。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。

    上面的代码可以修改为如下:

      define(["package/lib"], function (lib) {
    
          // behavior for our module
    function foo() {
    lib.log( "hello world!" );
    } // export (expose) foo to other modules as foobar
    return {
    foobar: foo
    }
    });

    然后我们需要调用这个模块方法的时候可以这样:

      require(["package/myModule"], function(myModule) {
    myModule.foobar();
    });

    利用一个毁掉函数,这样加载不是同步的,浏览器就不会假死,显然AMD规范更适合浏览器环境。现在最流行的AMD规范的javascript库就是require.js,下面我们来介绍。

##2.require.js使用

  • ###为什么要使用

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

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

  • ###引入require.js

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

    这里的data-main是指定主模块,即js目录下的main.js,这里简写省去后缀。

  • ###main.js写法

        // main.js
      requirejs(['moduleA', 'moduleB', 'moduleC'], function (moduleA, moduleB,moduleC){
        // some code here
      });
      

    require()函数接受两个参数。第一个参数是一个数组,表示所依赖的模块,上例就是['moduleA', 'moduleB', 'moduleC'],即主模块依赖这三个模块;第二个参数是一个回调函数,当前面指定的模块都加载成功后,它将被调用。加载的模块会以参数形式传入该函数,从而在回调函数内部就可以使用这些模块。
    require()异步加载moduleA,moduleB和moduleC,浏览器不会失去响应;它指定的回调函数,只有前面的模块都加载成功后,才会运行,解决了依赖性的问题。

  • ###requirejs.config() 

      requirejs.config({
    //设置别名
    paths: {
    jquery : "jquery-1.11.3.min"
    }
    });

    require.js要求,每个模块是一个单独的js文件。这样的话,如果加载多个模块,就会发出多次HTTP请求,会影响网页的加载速度。因此,require.js提供了一个优化工具,当模块部署完毕以后,可以用这个工具将多个模块合并在一个文件中,减少HTTP请求数。

  • ###define方法

    正如前面AMD规范中引用的例子,模块必须采用define函数来定义。假设main.js中定义了一个log模块,log.js应该这样写:

      define(["lib"], function (lib) {
    
          // behavior for our module
    function foo() {
    lib.log( "hello world!" );
    } // export (expose) foo to other modules as foobar
    return {
    foobar: foo
    }
    });

然后在main.js中引用:

	require(["log"], function(log) {
log.foobar();
});

[javascript模块化]require.js简单使用的更多相关文章

  1. JavaScript模块化-require.js

    http://www.cnblogs.com/duanhuajian/archive/2013/01/04/2844151.html 原文:http://www.ruanyifeng.com/blog ...

  2. 模块化 require.js 入门教学(前端必看系列)

    在工作的时候总是会用到模块化开发,那接下来我就顺着这个问题来说一下什么是模块化 前端模块化 !!! JS 模块化提供给我们三种规范 分别就是 No.1 commonjs  这个其实也就代表了node. ...

  3. require.js简单入门

    推荐文章:http://www.ruanyifeng.com/blog/2012/11/require_js.html 1.以下例子主要实现功能, 1)引用jq库获取dom中元素文本, 2)实现并引用 ...

  4. Javascript模块化工具require.js教程

    转自:http://www.w3cschool.cc/w3cnote/requirejs-tutorial-1.html, http://www.w3cschool.cc/w3cnote/requir ...

  5. require.js实现js模块化编程(一)

    1.认识require.js: 官方文档:http://requirejs.org/RequireJS是一个非常小巧的JavaScript模块载入框架,是AMD规范最好的实现者之一.最新版本的Requ ...

  6. require.js模块化

    require.js简单来说就是把js代码分装模块化了 模块化 模块就是实现特定功能的一组方法.只要把不同的函数(以及记录状态的变量)简单地放在一起,就算是一个模块. 我拿一个运动框架来解释一下req ...

  7. JS模块化工具require.js教程(一):初识require.js

    随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式,我们需要团队协作.模块复用.单元测试等等一系列复杂的需求 ...

  8. require.js的使用

    RequireJS是一个非常小巧的JavaScript模块载入框架,是AMD规范最好的实现者之一.最新版本的RequireJS压缩后只有14K,堪称非常轻量.它还同时可以和其他的框架协同工作,使用Re ...

  9. 如何使用require.js?

    最近几天在学习一个javascript库require.js,也看了一些相关的教学视频,这里推荐一下幕课网阿当老师的<阿当大话西游之Web组件>的教学视频,一整套看下来,参照视频里面的de ...

随机推荐

  1. java 计算时间差

    DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date d1 = df.parse(&quo ...

  2. pycharm 中切换terminal的盘符

    第一步,采用 cd .. 将当前路径设置为该盘符的根目录 第二步,采用 C: 将盘符设置为C盘然后使用 cd 命令将路径切换到指定位置

  3. js 事件对象event

    在触发DOM上的某个事件时,会产生一个事件对象event.这个对象中包含着所有与事件有关的信息.包括导致事件的元素,事件的类型以及其他与特定事件相关的信息. <body> <a hr ...

  4. POJ 3525 Most Distant Point from the Sea (半平面交)

    Description The main land of Japan called Honshu is an island surrounded by the sea. In such an isla ...

  5. ES6转ES5环境搭配

    1.初始化项目 在项目根目录创建 package.json 文件 npm init //或者 npm init -y 2.安装babel-cli脚手架 npm install babel-cli -- ...

  6. BZOJ 1018: [SHOI2008]堵塞的交通traffic(线段树分治+并查集)

    传送门 解题思路 可以离线,然后确定每个边的出现时间,算这个排序即可.然后就可以线段树分治了,连通性用并查集维护,因为要撤销,所以要按秩合并,时间复杂度\(O(nlog^2 n)\) 代码 #incl ...

  7. BUUCTF | [CISCN2019 华北赛区 Day2 Web1]Hack World

    id=0 id=1 id=2 id=3 发现结果不一样,尝试 : ">4","=4","<4" : 在自己的环境下验证一下: 爆 ...

  8. Vue.js 计算属性

    Vue.js 计算属性 使用计算属性的实例: <!DOCTYPE html> <html> <head> <meta cahrset="utf-8& ...

  9. Win7、Win10、Linux局域网文件共享

    目录 1.WIN7系统局域网文件共享 2.WIN10系统局域网文件共享 3.Linux 局域网文件共享 WIN7系统局域网文件共享 步骤一: 打开网络和共享中心----更改高级共享设置 步骤二: 选择 ...

  10. 运行python不报错,运行pip报错

    Fatal error in launcher: Unable to create process using '""c:\program files (x86)\python36 ...