专栏首页jojo的技术小屋原 模块化编程之require.js

原 模块化编程之require.js

作者:汪娇娇

日期:2016.5.4

最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了。后来,代码越来越多,一个文件不够了,必须分成多个文件,依次加载。下面的网页代码,相信很多人都见过。  

<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>

这段代码依次加载多个js文件。

这样的写法有很大的缺点。首先,加载的时候,浏览器会停止网页渲染,加载文件越多,网页失去响应的时间就会越长;其次,由于js文件之间存在依赖关系,因此必须严格保证加载顺序(比如上例的1.js要在2.js的前面),依赖性最大的模块一定要放到最后加载,当依赖关系很复杂的时候,代码的编写和维护都会变得困难。

require.js的诞生,就是为了解决这两个问题:

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

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

require.js的加载:

使用require.js的第一步,是先去官方网站下载最新版本

下载后,假定把它放在js子目录下面,就可以加载了。

<script src="js/require.js"></script>

有人可能会想到,加载这个文件,也可能造成网页失去响应。解决办法有两个,一个是把它放在网页底部加载,另一个是写成下面这样:

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

async属性表明这个文件需要异步加载,避免网页失去响应。IE不支持这个属性,只支持defer,所以把defer也写上。

加载require.js以后,下一步就要加载我们自己的代码了。假定我们自己的代码文件是main.js,也放在js目录下面。那么,只需要写成下面这样就行了:

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

data-main属性的作用是,指定网页程序的主模块。在上例中,就是js目录下面的main.js,这个文件会第一个被require.js加载。由于require.js默认的文件后缀名是js,所以可以把main.js简写成main。

如果还需要其他的js文件,那么main.js里应写入以下内容:   

require.config({
       baseUrl:"js",     //共同的路径
       paths:{
                jq:"jquery-1.11.1.min",
                bs:"bootstrap.min",
                t2:"test2",
                t3:"test3"
       }
})

require (["jq","bs","t2","t3"],function(){
      var module1=require("jq");
      var module1=require("bs");   //让jq在bs之前加载,此时可以把绿色背景标记的require写成define
      $(document).click(function(){
            console.log("1");
      })
})

如果想触发某个事件后再加载另外的模块也是可以的,代码如下:

require.config({
	paths:{
		"skin1":"skin1",
		"skin2":"skin2"
	}
})
var div1=document.getElementById("div1");
div1.onclick=function(){
	require(["skin1","skin2"],function(){
		//需要处理的代码
	})
}

最后,如若哪里有问题,还请轻喷,但是欢迎指出大家一起交流(*^__^*) !

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 原 荐 自己写代码对比工具

    作者:汪娇娇 时间:2018年1月19日 上一篇:自己写JSON编辑器 基于上一次做的JSON编辑器,继而衍生出这一次的代码对比工具,本来打算写在一块的,想想懒...

    jojo
  • 原 荐 svga 动画

    作者:汪娇娇 时间:2017年12月26日 对于一些小的简单的动画,借助css、js差不多就能实现,而且还不能保证还原度百分百(还能接受); 对于那些复杂的动画...

    jojo
  • js模块化编程之彻底弄懂CommonJS和AMD/CMD!(转)

    答:因为有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块。 但是,这样做有一个前提,那就是大家必须以同样的方式编写模块,否则你有你的写...

    jojo
  • Webpack的异步加载原理及分包策略(深度好文,建议收藏)

    webpack ensure 有人称它为异步加载,也有人称为代码切割,他其实就是将 js 模块给独立导出一个.js 文件,然后使用这个模块的时候,再创建一个 s...

    winty
  • requireJS

    requireJS(http://www.requirejs.cn/)是一个JavaScript模块加载器。它非常适合在浏览器中使用,使用RequireJS加...

    奋飛
  • 对比requirejs更好的理解seajs

    seajs遵循CMD规范,requirejs遵循AMD规范。AMD规范是预加载,CMD规范是赖加载。 下文举例假设有文件 b.js, c.js如下 //b.js...

    smy
  • 使用JS异步回调解决pjax加载问题

    使用pjax会导致部分js插件无法加载,最后我选择异步加载解决问题。 你可能会问异步就够了为什么还有个callback是干啥的,不急你先看看代码。

    乔千
  • webpack 项目 css/js主域重试

    为了提高网站的访问速度,现在一般会将静态资源放在 CDN 下,而不是放在网站的域名之下。以腾讯课堂为例,其域名为 ke.qq.com,打开控制台,访问 ke....

    IMWeb前端团队
  • webpack 项目 css/js主域重试

    为了提高网站的访问速度,现在一般会将静态资源放在 CDN 下,而不是放在网站的域名之下。以腾讯课堂为例,其域名为 ke.qq.com,打开控制台,访问 ke.q...

    IMWeb前端团队
  • ACCESS数据库基本使用

    用户1112962

扫码关注云+社区

领取腾讯云代金券