requirejs初体验

本文介绍RequireJS,一种遵循AMD规范的模块化编程框架,用于实现浏览器端的异步加载和模块化编程。通过示例展示如何使用RequireJS定义和加载模块,以及与jQuery等框架的集成。

    requirejs是一个模块化编程框架,从名字就可以看出,是javascript编写的。他遵循amd规范,即Asynchronous Module Define异步加载定义模块规范,定义模块化,使用了define关键字,语法如下:

    define('moduleName',function(require,module){ })

    其中moduleName是给模块取一个别名,这个是可以省略的,默认模块就是js文件本身的名字,如math.js,我们的模块名字就是math,无需再在math.js文件中使用define("moduleName")的方式再定义一个名字。

    当我们使用模块的时候,需要使用require关键字,语法如下:

    require(["module-a","module-b"],function(a,b){ })

    如果一个模块就是一个可以执行的程序,可以直接通过require(["module-a"])的方式让他运行。

    requirejs主要使用在浏览器端的模块化编程,为了体现它的异步加载,我们来看一个简单的例子,源代码如下所示:

   index.html

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>hello</title>
   <script type="text/javascript" src="a.js">

   </script>
  </head>
  <body>
        <h2>helloworld.</h2>
  </body>
</html>

    a.js 

(function(){
    function fun1(){
        alert("it works.");
    }

    fun1();
})();

    这个示例是一个很简单的页面加载的示例,html在进行渲染的过程中,会从<html>标签体开始,直到</html>标签体结束会依次加载页面中的脚本,样式,页面元素,如果脚本写在header中,那么会阻塞后面的渲染,直到他加载完成,如果脚本中会执行同步操作,还需要等待同步操作完成,才能接着渲染页面。运行以上示例,动态截图如下所示:

    

    运行示例的时候,在弹窗的时候,页面是空白的,只有当我们将弹窗关闭,页面才出现了元素。这就是我们同步加载javascript带来的一个问题。

    我们引入requirejs,然后将弹窗操作重新编写,作为一个模块,再引入到页面中,代码如下所示:

    index.html

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>hello</title>
    <script type="text/javascript" src="./require.js"></script>
    <script type="text/javascript">
        require(["./b"]);
    </script>
  </head>
  <body>
        <h2>helloworld.</h2>
  </body>
</html>

    b.js 

define(function(require,exports){
    function fun1(){
        alert("itworks.");
    }
    fun1();
});

    再次打开页面,查看效果,这时候运行的动态截图如下所示:

     

    当出现弹窗的时候,页面的元素已经渲染,而javascript脚本执行是在页面渲染之后,就好比我们使用jQuery,使用了

    $(function(){

        // todo

    }) ;

    这样的效果。这个效果只是说明了requirejs作为异步加载的一个好处,他的语法只有少数的几个,当我们定义模块的时候使用define,当我们需要用到某个模块的时候使用require。

    其实requirejs也可以和其他框架一起使用,比如jQuery,underscore,可以把jQuery当做一个模块。我们看jQuery的源码会发现,jQuery其实默认支持amd规范,所以可以很自然的与requirejs结合使用。

    

   如下所示,是一个很简单的示例,我们通过引入jQuery模块,然后通过jQuery的api来操作文档。示例中,我们还通过

    require.config({

        paths:{ "jquery":"./lib/jquery"}

    }) ;

    这段代码是对模块进行设置别名,我们不用再引入jQuery的时候加上那么长的路径了。

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8" />
	<title>requirejs</title>
	<script type="text/javascript" src="./require.js"></script>
	<script type="text/javascript">
		require.config({
			paths:{
				'jquery':'./lib/jquery'
			}
		});
		require(['jquery'],function($){
			$('#root').html('jQuery is a javascript framework.');
		});
	</script>
</head>
<body>
	<h2>hello,world.</h2>
	<div id="root"></div>
</body>
</html>

      运行结果:

     

    通过以上示例,我们简单了解了requirejs的用法,以及作为异步加载框架的特点。总结一下requirejs,就是实现了amd规范的模块化编程框架,主要使用在浏览器端。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值