网站首页 > 知识剖析 正文
Hello~~各位小伙伴,今天我们广州蓝景,继续和大家分享前端技术干货,前端模块化(5分钟快速入门RequireJs),
各位开发项目的时候引用JS都会遇到以下的情景
产生AMD规范的背景
因为使用各种插件,或者团队协同合作,产生多个js文件,
假如使用的JQ插件,则必须先引用jquery库才能够正常执行,
JS文件之间强依赖关系,让我们不敢动文件的引入顺序。
并且,在渲染页面的过程中,同步读取JS文件会堵塞整个页面,
这对网站的性能起到很大的影响,因此,我们需要异步加载JS文件。
AMD规范
AMD规范全称为Asynchronous Moudle Definition,即异步模块加载机制。
AMD很短也很简单,但它却完整描述了模块的定义,依赖关系,引用关系以及加载机制。
从它被requireJS,NodeJs,Dojo,JQuery使用也可以看出它具有很大的价值,
JQuery也采用了AMD规范
//Jquery-2.1.0 源码
if ( typeof define === “function” && define.amd ) {
define( “jquery”, [], function() {
return jQuery;
});
}
AMD规范简单到只有一个API,即define函数
define([module-name?], [array-of-dependencies?], [module-factory-or-object]);
其中:
module-name: 模块标识,可以省略。
array-of-dependencies: 所依赖的模块,可以省略。
module-factory-or-object: 模块的实现,或者一个JavaScript对象。
举个例子:
define( “jquery”, [], function() {
return jQuery;
});
采用AMD规范的RequireJS
RequireJS采用AMD规范,让我们在使用过程中感受到了模块化的便利,
引入文件时,再不需要按照固定顺序,只需要定义好模块之间的依赖关系即可
1.使用?npm安装Requirejs
cnpm install requirejs
注意:requirejs是连起来的,中间没有点,请注意防伪
2.引入Requirejs
data-main属性的作用是,指定网页程序的主模块。
这个文件会第一时间被require.js加载。
由于require.js默认的文件后缀名是js,所以可以把main.js简写成main。
在main.js里面,引用其他js文件即可,
**补充:**假设index.js是临时工写的,他不符合AMD规范,我们就需要在require.config里传入的对象里面的shim属性进行配置
//index.js
//这是不符合AMD规范的
KaTeX parse error: Expected '}', got 'EOF' at end of input: … console.log((this))
})
//下面写法就符合AMD规范
// define(‘index’,[‘jquery’],function(){
// KaTeX parse error: Expected '}', got 'EOF' at end of input: … console.log((this))
// })
// })
因此,在main.js就需要这样写
require.config({
//类似base标签,全局修改起始路径
//baseUrl: “js/lib”,
// 指明模块路径
paths:{
‘index’:‘lib/index’
},
// 兼容非AMD规范的模块
shim:{
‘index’:{
// 写上该模块的依赖,没有则为空
deps:[‘jquery’],
// 将改造好的模块输出出来
export:‘index’
}
}
})
//主入口文件
require([‘index’,‘jquery’],function(_,KaTeX parse error: Expected '}', got 'EOF' at end of input: … console.log()
})
如果你希望你的代码直接使用,获取兼容AMD规范,可以采取下列写法
//兼容AMD模块
if(typeof defined == “function” && define.amd){
define(“index”,[‘jquery-2.1.0’],function(){
alert(‘hello world’);
console.log(KaTeX parse error: Expected 'EOF', got '}' at position 17: …".baba")); }?) return } …(".baba"));
}
想要了解更多web前端开发技术资料,可在评论区留言!也可添加我们微信:philip_tan
猜你喜欢
- 2024-12-22 快速了解JavaScript的面向对象 js面向对象和面向过程
- 2024-12-22 vue中的prop vue中的prop属性
- 2024-12-22 一文解读JavaScript事件对象和表单对象
- 2024-12-22 IE法提取网页数据 如何提取网页中的数据
- 2024-12-22 用node.js实现一个网页爬虫 nodejs爬虫框架crawler
- 2024-12-22 HTML DOM 引用( ) 对象 html引用其他html
- 2024-12-22 判断JavaScript的常用对象类型的方法和是否包含某个属性的判断
- 2024-12-22 JavaScript 中 require 和 import 语句的区别
- 2024-12-22 JavaScript中常见的几种错误 javascript中常见的错误有
- 2024-12-22 20道Vue常见面试题,你会几道? vue的一些面试题
- 最近发表
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)