- var math = require('math');
然后,就可声调用模块供给的办法:
2009年,美公法度榜样员Ryan Dahl创造了node.js项目,将javascript说话用于办事器端编程。
- var math = require('math');
- math.add(2,3); // 5
因为这个系列重要针对浏览器编程,不涉及node.js,所以对CommonJS就不多做介绍了。我们在这里只要知道,require()用于加载模块就行了。
有了办事器端模块今后,很天然地,大年夜家就想要客户端模块。并且最好两者可以或许兼容,一个模块不消修改,在办事器和浏览器都可以运行。
然则,因为一个重大年夜的局限,使得CommonJS规范不实用于浏览器情况。照样上一节的代码,如不雅在浏览器中运行,会有一个很大年夜的问题,你能看出来吗?
- var math = require('math');
- math.add(2, 3);
这对办事器端不是一个问题,因为所有的模块都存放在本地硬盘,可以同步加载完成,等待时光就是硬盘的攫取时光。然则,对于浏览器,这倒是一个大年夜问题,因为模块都放在办事器端,等待时光取决于网速的快慢,可能要等很长时光,浏览器处于"假逝世"状况。
是以,浏览器端的模块,不克不及采取"同步加载"(synchronous),只能采取"异步加载"(asynchronous)。这就是AMD规范出生的背景。
假定如今有一个math.js文件,它定义了一个math模块。那么,math.js就要如许写:
- define('sample3' ,['sample','sample1'],function (sample,sample1) {
- var sample4 = require('sample4');
- return function(){
- alert(sample.name+':'+sample.sayhell());
- }
- });
AMD是"Asynchronous Module Definition"的缩写,意思就是"异步模块定义"。它采取异步方法加载模块,模块的加载不影响它后面语句的运行。所有依烂魅这个模块的语句,都定义在一个回调函数中,比及加载完成之后,这个回调函数才会运行。
AMD也采取require()语句加载模块,然则不合于CommonJS,它请求两个参数:
- require([module], callback);
第一个参数[module],是一个数组,琅绫擎的成员就是要加载的模块;第二个参数callback,则是加载成功之后的回调函数。如不雅将前面的代码改写成AMD情势,就是下面如许:
- require(['math'], function (math) {
- math.add(2, 3);
- });
math.add()与math模块加载不是同步的,浏览器不会产生假逝世。所以很显然,AMD比较合适浏览器情况。
3.require.js的加载
有人可能会想到,加载这个文件,也可能造成网页掉去响应。解决办法有两个,一个是把它放在网页底部加载,另一个是写成下面如许:
- <script src=http://developer.51cto.com/art/201705/"js/require.js" defer async="true" ></script>
async属性注解这个文件须要异步加载,避免网页掉去响应。IE不支撑这个属性,只支撑defer,所以把defer也写上。
加载require.js今后,下一步就要加载我们本身的代码了。假定我们本身的代码文件是main.js,也放在js目次下面。那么,只须要写成下面如许就行了:
- <script src=http://developer.51cto.com/art/201705/"js/require.js" data-main="js/main"></script>
推荐阅读
如何安装pandom : 一个针对Linux的真随机数生成器
本教程只针对 amd64/x86_64 架构 Linux 内核版本大年夜于等于 2.6.9 的体系。本文将解释若何安装 pandom,这是一个由 ncomputers.org 保护的准时颤抖真随机数生成器。我们老是建议在应用>>>详细阅读
本文标题:RequireJS模块化编程详解
地址:http://www.17bianji.com/lsqh/35293.html
1/2 1