js实例教程-require.js的模块化知识整理

发布时间:2018-11-25 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了js实例教程-require.js的模块化知识整理脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。

本文是对自己JS学习的一个总结和一些碎片化学习的整理,主要是关于模块化的以及require.js。

Javascript模块化编程(三):require.js的用法

(注:原著真的很清楚详细,如果你看不懂有两种可能:zs不够或层次未到。我也是时隔了很久再看才觉有味的。)

模块化:

1. 原始表达方式:

 function  m1(){  } function m2(){  } m1() m2()

上面定义了两个模块,m1和m2,写法很直接,但是缺陷在于模块间的依耐关系不明确,也容易造成全局变量的污染问题。

2.对象表达方式:

 VAR moudle=new Object({     xx:21,     m1: function () {      },     m2: function () {      } }) 

把模块封在对象中,缺陷在于内部属性的暴露问题,例如更改内部属性xx的值问题。

3.立即执行方式:

 ;(function () {  })()

这种方式经常见,它解决了对象表达方式的缺陷。

模块化规范问题:

如上述所列,定义模块化的方式很多,为了开发的统一性,产生模块化开发的规范:CommonJS(Node的模块化依次实施),amD,CMD。

为什么会有三种模块化规范?不同的模块化规范针对两端(服务器端和浏览器端),即服务器端和浏览器端的特性不一,例浏览器端的模块化加载需要异步加载

AMD:”异步模块定义”。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。

AMD的模块加载方式:

 require([module], callback);

第一个参数为需要加载的模块数组,第二个是回调函数。

而博客标题的require.js是依AMD规范实施的一个库。

个人理解require.js的意义:

网站大了需要加载的模块数量变多,模块之间的依赖关系变得复杂,如何正确加载?如何不影响网站的加载(减缓响应时间)?

注意:异步加载

require.js的使用:

1:引入

script标签引入,但是require.js引入发生错误呢?

所以==

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

说明:defer和 async:强调异步加载方式引入,defer是IE专用(浏览器有两种,一种叫IE,一种叫其它)。

2:主模块的引入

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

说明:data-main用来强调主模块是main(或者你写成js/main.js)。主模块就是整个主体的入口,与其它模块相依。相当于我们C的main函数这种。

3.主模块的书写

例子的前提是main模块现在依赖于’jquery’, ‘underscore’, ‘backbone’这三个模块。

  require([&#39;jquery', 'underscore', 'backbone'], function ($, _, Backbone){     // some code here   });

4.require.config()方法(写在主模块的最上面)

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

这里需要记录的是,paths的意义就是指各个模块的加载路径。上面的写法默认各模块和主模块在同一级目录下。你也可以用下面的方式替代

 require.config({     //baseUrl指定模块目录     baseUrl: "js/lib",     paths: {       "jquery": "jquery.min",       "underscore": "underscore.min",       "backbone": "backbone.min"     }   });

5.define()定义模块
require.js加载的模块,采用AMD规范。也就是说,模块必须按照AMD的规定来写

 define([';myLib'], function(myLib){     function foo(){       myLib.DOSomething();     }     return {       foo : foo     };   });

当require()函数加载上面这个模块的时候,就会先加载myLib.js文件。

6.加载非规范的模块

不是所有的模块都是AMD规范,require,js依旧可以加载

 require.config({     shim: {       'underscore':{         exports: '_'       },       'backbone': {         deps: ['underscore', 'jquery'],         exports: 'Backbone'       }     }   });

shim参数用来配置不符AMD规范的模块,underscore和backbone是两个模块,其中的参数属性exports表示该模块向外暴露的引用方式,例如jQuery的$

deps表示该模块的依赖。

6.其它

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

本文是对自己JS学习的一个总结和一些碎片化学习的整理,主要是关于模块化的以及require.js。

Javascript模块化编程(三):require.js的用法

(注:原著真的很清楚详细,如果你看不懂有两种可能:zs不够或层次未到。我也是时隔了很久再看才觉有味的。)

模块化:

1. 原始表达方式:

 function  m1(){  } function m2(){  } m1() m2()

上面定义了两个模块,m1和m2,写法很直接,但是缺陷在于模块间的依耐关系不明确,也容易造成全局变量的污染问题。

2.对象表达方式:

 var moudle=new Object({     xx:21,     m1: function () {      },     m2: function () {      } }) 

把模块封在对象中,缺陷在于内部属性的暴露问题,例如更改内部属性xx的值问题。

3.立即执行方式:

 ;(function () {  })()

这种方式经常见,它解决了对象表达方式的缺陷。

模块化规范问题:

如上述所列,定义模块化的方式很多,为了开发的统一性,产生模块化开发的规范:CommonJS(Node的模块化依次实施),AMD,CMD。

为什么会有三种模块化规范?不同的模块化规范针对两端(服务器端和浏览器端),即服务器端和浏览器端的特性不一,例浏览器端的模块化加载需要异步加载。

AMD:”异步模块定义”。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。

AMD的模块加载方式:

 require([module], callback);

第一个参数为需要加载的模块数组,第二个是回调函数。

而博客标题的require.js是依AMD规范实施的一个库。

个人理解require.js的意义:

网站大了需要加载的模块数量变多,模块之间的依赖关系变得复杂,如何正确加载?如何不影响网站的加载(减缓响应时间)?

注意:异步加载

require.js的使用:

1:引入

用script标签引入,但是require.js引入发生错误呢?

所以==》

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

说明:defer和 async:强调异步加载方式引入,defer是IE专用(浏览器有两种,一种叫IE,一种叫其它)。

2:主模块的引入

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

说明:data-main用来强调主模块是main(或者你写成js/main.js)。主模块就是整个主体的入口,与其它模块相依。相当于我们C的main函数这种。

3.主模块的书写

例子的前提是main模块现在依赖于’jquery’, ‘underscore’, ‘backbone’这三个模块。

  require(['jquery', 'underscore', 'backbone'], function ($, _, Backbone){     // some code here   });

4.require.config()方法(写在主模块的最上面)

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

这里需要记录的是,paths的意义就是指各个模块的加载路径。上面的写法默认各模块和主模块在同一级目录下。你也可以用下面的方式替代

 require.config({     //baseUrl指定模块目录     baseUrl: "js/lib",     paths: {       "jquery": "jquery.min",       "underscore": "underscore.min",       "backbone": "backbone.min"     }   });

5.define()定义模块
require.js加载的模块,采用AMD规范。也就是说,模块必须按照AMD的规定来写

 define(['myLib'], function(myLib){     function foo(){       myLib.doSomething();     }     return {       foo : foo     };   });

当require()函数加载上面这个模块的时候,就会先加载myLib.js文件。

6.加载非规范的模块

不是所有的模块都是AMD规范,require,js依旧可以加载

 require.config({     shim: {       'underscore':{         exports: '_'       },       'backbone': {         deps: ['underscore', 'jquery'],         exports: 'Backbone'       }     }   });

shim参数用来配置不符AMD规范的模块,underscore和backbone是两个模块,其中的参数属性exports表示该模块向外暴露的引用方式,例如jQuery的$

deps表示该模块的依赖。

6.其它

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

觉得可用,就经常来吧!Javascript技巧 脚本宝典 欢迎评论哦!&nbsp;js技巧,巧夺天工,精雕玉琢。小宝典献丑了!

脚本宝典总结

以上是脚本宝典为你收集整理的js实例教程-require.js的模块化知识整理全部内容,希望文章能够帮你解决js实例教程-require.js的模块化知识整理所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。