requireJS简单入门学习

简介: <h1>概要</h1> <div><br></div> <p>requireJS,翻译成中文即"需要js",说白了就是加载js文件用的。怎么加载呢?,即遵循AMD规范的模块化加载。除了AMD规范还有一个叫做CMD规范,遵循CMD规范的模块加载器,比较有名的应该是国内的淘宝首席架构师”玉伯“写的SeaJS了,而且这货听说还能加载css文件,似乎很niubility! 但是今天讲的是req

概要


requireJS,翻译成中文即"需要js",说白了就是加载js文件用的。怎么加载呢?,即遵循AMD规范的模块化加载。除了AMD规范还有一个叫做CMD规范,遵循CMD规范的模块加载器,比较有名的应该是国内的淘宝首席架构师”玉伯“写的SeaJS了,而且这货听说还能加载css文件,似乎很niubility! 但是今天讲的是requireJS,至于二者的优缺点请参考:http://www.zhihu.com/question/20342350,后来发现最火的答案居然是seaJS的作者写的,看来作者还是很在乎别人对SeaJS的评价。


ok,回到原题,有人会问为什么要使用基于模块的形式加载js文件呢?我的答案是不一定要用这种形式,使用这种形式是因人而异,因项目而异的,如果做大型网站的话,使用模块的形式会比较规范,维护也比较容易,架构也比较清晰,反正多学点东西没坏处。而且现在很多的js前端框架也开始支持兼容模块化的加载方式了,比如大名鼎鼎的,作为一个PE无人不知的Jquery,还有Node,Dojo,等。下面来看看jquery-ui的一个button组件的一小段代码,就知道怎么回事了。

<pre name="code" class="html">(function( factory ) {
	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define([
			"jquery",
			"./core",
			"./widget"
		], factory );
	} else {

		// Browser globals
		factory( jQuery );
	}
}(function( $ ) {
//your plugin code
 //你的插件or模块代码 
});


 这是一种兼容的方法,如果你使用了AMD加载器(如requireJS)的话,define的类型就是function,然后就会按照AMD的规范来定义此插件(模块),关于如何按AMD规范来定义插件,请参考:http://requirejs.org/docs/api.html#define。如果你没有使用加载器的话则按照一般的方法定义,这样的话就可以按照普通的方法正常使用了。 

现在我们应该知道,requireJS只能正确加载按照AMD规范定义的插件,通过只要对普通的插件进行简单的修改即可,不过现在越来越多的插件开始兼容AMD规范了。好了,现在来看看如何使用requireJS来加载插件吧。

一个小例子

那就用jquery-UI做例子吧,首先建立一个如下结构的工程目录:

├── index.html
├── js
│   ├── app.js
│   ├── jquery-ui
│   │   ├── accordion.js
│   │   ├── autocomplete.js
│   │   ├── button.js
│   │   ├── core.js
│   │   ├── datepicker.js
│   │   ├── dialog.js
│   │   └── ...
│   ├── jquery.js
│   └── require.js
我们可以看到,所有js文件都放在了js目录中,jquery.js和require.js直接位于js目录中,并且所有的jquery UI的文件都位于jquery-ui目录中。app.js则包含我们的主要代码。

不过你也可以使用其他的目录结构,不过可能需要进行一些配置修改,这样requireJS才知道如何找到这些依赖的文件,可以参考change some configuration 

现在这些文件都准备好了,如何使用它们呢?请看index.html中的代码:

<!doctype html>
<html lang="en">
<head>
    ...
</head>
<body>
 
<script src="js/require.js" data-main="js/app"></script>
 
</body>
</html>

我们只需要加载require.js文件即可,注意这里只能加载这个一个文件,否则会报错的,详细请参考:http://requirejs.org/docs/errors.html#mismatch。这里还需要注意data-main属性,这里是js/app.js,这里的意思是等reuire.js加载完后会自动执行app.js中的代码。不信的话,可以在app.js中加一条console.log();测试一下。

/* app.js */
console.log( "loaded" );

下面就可可以app.js使用require()这个函数来加载你想要的js文件了,如:

require([ "jquery-ui/autocomplete" ], function( autocomplete ) {
    ...
});
这样就会异步加载 jquery-ui/autocomplete.js和它所依赖的js文件(jquery.js,jquery-ui/core.js,jquery-ui/wedget.js等)。
当这些依赖的文件全部加载完成后,就会执行后面的回调函数。

下面是使用jquery-UI中的一个例子:

require([ "jquery-ui/autocomplete" ], function( autocomplete ) {
    autocomplete({ source: [ "One", "Two", "Three" ] }, "<input>" )
        .element
        .appendTo( "body" );
});
你也可以吧jquery加载进来,这样就可以像使用jquery那样使用了:

require([ "jquery", "jquery-ui/autocomplete" ], function( $ ) {
    $( "<input>" )
        .autocomplete({ source: [ "One", "Two", "Three" ]})
        .appendTo( "body" );
});

ok,终于把这个例子介绍完了,尽管很粗糙,但是有个印象就行了,毕竟是入门,如果需要更深入的研究可以到reqiureJS官网查看更多细节和原理。
相关文章
|
4月前
|
设计模式 JavaScript 前端开发
针对小白的 JS 基本概念详细介绍
针对小白的 JS 基本概念详细介绍
42 0
|
6月前
|
JavaScript 前端开发 API
Vue.js入门指南:从基础到进阶,掌握现代JavaScript框架的核心概念与高级特性(2W字小白教程)
Vue.js入门指南:从基础到进阶,掌握现代JavaScript框架的核心概念与高级特性(2W字小白教程)
63 0
|
存储 设计模式 JavaScript
前端知识库Reactjs基础系列二(进阶)
上一节复习reactjs的基础知识,本节主要了解reactjs中一些高阶用法。
|
存储 JavaScript 索引
🚀从零开始学习JS基础8️⃣🚀
数组是指一组数据的集合,其中的每个数据被称作元素,在数组中可以存放任意类型的元素。数组是一种将一组数据存储在单个变量名下的优雅方式。数组可以把一组相关的数据一起存放,并提供方便的访问(获取)方式。
110 0
🚀从零开始学习JS基础8️⃣🚀
|
JavaScript
🚀从零开始学习JS基础6️⃣🚀
在一个程序执行的过程中,各条代码的执行顺序对程序的结果是有直接影响的。很多时候我们要通过控制代码的执行顺序来实现我们要完成的功能。简单来说,流程控制就是来控制代码按照一定结构顺序来执行。
🚀从零开始学习JS基础6️⃣🚀
|
存储 JavaScript 前端开发
🚀从零开始学习JS基础🔟🚀
在 JavaScript 中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等。
159 0
🚀从零开始学习JS基础🔟🚀
|
存储 JavaScript 前端开发
🚀从零开始学习JS基础4️⃣🚀
在计算机中,不同的数据所需占用的存储空间是不同的,为了便于把数据分成所需内存大小不同的数据,充分利用存储空间,于是定义了不同的数据类型。 简单来说,数据类型就是数据的类别型号。比如姓名“张三”,年龄18,这些数据的类型是不一样的。
161 0
🚀从零开始学习JS基础4️⃣🚀
|
存储 JavaScript 前端开发
🚀从零开始学习JS基础3️⃣🚀
变量简单来说就是一个装东西的盒子,专业来说变量是用于存放数据的容器。 我们通过 变量名 获取数据,甚至数据可以修改。 变量是程序在内存中申请的一块用来存放数据的空间。类似我们酒店的房间,一个房间就可以看做是一个变量。
119 0
🚀从零开始学习JS基础3️⃣🚀
|
JavaScript 程序员 编译器
🚀从零开始学习JS基础4️⃣🚀(下)
计算机不能直接理解任何除机器语言以外的语言,所以必须要把程序员所写的程序语言翻译成机器语言才能执行程序。程序语言翻译成机器语言的工具,被称为翻译器。
🚀从零开始学习JS基础4️⃣🚀(下)
|
Web App开发 前端开发 JavaScript
99% 开发者没弄明白的 babel 知识
不管你是工具开发者、Library 开发者还是业务开发者,都需要多一点耐心,好好把这篇文章提及的内容梳理学习一下。
99% 开发者没弄明白的 babel 知识