第一次接触JS require.js模块化工具


Posted in Javascript onApril 17, 2016

随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式,我们需要团队协作、模块复用、单元测试等等一系列复杂的需求。

第一次接触JS require.js模块化工具

RequireJS是一个非常小巧的JavaScript模块载入框架,是AMD规范最好的实现者之一。最新版本的RequireJS压缩后只有14K,堪称非常轻量。它还同时可以和其他的框架协同工作,使用RequireJS必将使您的前端代码质量得以提升。

requirejs能带来什么好处

官方对requirejs的描述:

RequireJS is a JavaScript file and module loader. It is optimized for in-browser use, but it can be used in other JavaScript environments, like Rhino and Node. Using a modular script loader like RequireJS will improve the speed and quality of your code.

大致意思:

在浏览器中可以作为js文件的模块加载器,也可以用在Node和Rhino环境,balabala...。这段话描述了requirejs的基本功能"模块化加载",什么是模块化加载?我们要从之后的篇幅中一一解释

先来看一段常见的场景,通过示例讲解如何运用requirejs

正常编写方式
index.html:

<!DOCTYPE html>
<html>
 <head>
  <script type="text/javascript" src="a.js"></script>
 </head>
 <body>
  <span>body</span>
 </body>
</html>

a.js:

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

可能你更喜欢这样写

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

第二种方法使用了块作用域来申明function防止污染全局变量,本质还是一样的,当运行上面两种例子时不知道你是否注意到,alert执行的时候,html内容是一片空白的,即<span>body</span>并未被显示,当点击确定后,才出现,这就是JS阻塞浏览器渲染导致的结果。

requirejs写法

当然首先要到requirejs的网站去下载js -> requirejs.rog
index.html:

<!DOCTYPE html>
<html>
 <head>
  <script type="text/javascript" src="require.js"></script>
  <script type="text/javascript">
   require(["a"]);
  </script>
 </head>
 <body>
  <span>body</span>
 </body>
</html>

a.js:

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

浏览器提示了"it works",说明运行正确,但是有一点不一样,这次浏览器并不是一片空白,body已经出现在页面中,目前为止可以知道requirejs具有如下优点:

1、防止js加载阻塞页面渲染
2、使用程序调用的方式加载js,防出现如下丑陋的场景

<script type="text/javascript" src="a.js"></script>
<script type="text/javascript" src="b.js"></script>
<script type="text/javascript" src="c.js"></script>
<script type="text/javascript" src="d.js"></script>
<script type="text/javascript" src="e.js"></script>
<script type="text/javascript" src="f.js"></script>
<script type="text/javascript" src="g.js"></script>
<script type="text/javascript" src="h.js"></script>
<script type="text/javascript" src="i.js"></script>
<script type="text/javascript" src="j.js"></script>

以上就是本文的全部内容,希望对大家认识require.js模块化工具有所帮助。

Javascript 相关文章推荐
javascript获得服务器端控件的ID的实现代码
Dec 28 Javascript
html+js实现动态显示本地时间
Sep 21 Javascript
jquery 日期控件datepicker属性详细解析
Nov 08 Javascript
js实现单行文本向上滚动效果实例代码
Nov 28 Javascript
jquery退出each循环的写法
Feb 26 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
Apr 02 Javascript
浅析JavaScript事件和方法
Feb 28 Javascript
jQuery on()绑定动态元素出现的问题小结
Feb 19 Javascript
jquery获取复选框checkbox的值的简单实现方法
May 26 Javascript
jQuery实现隔行变色的方法分析(对比原生JS)
Nov 18 Javascript
Vue CLI3 开启gzip压缩文件的方式
Sep 30 Javascript
vue登录以及权限验证相关的实现
Oct 25 Javascript
jqGrid 学习笔记整理——进阶篇(一 )
Apr 17 #Javascript
JS组件Bootstrap dropdown组件扩展hover事件
Apr 17 #Javascript
理解javascript对象继承
Apr 17 #Javascript
node.js连接mongoDB数据库 快速搭建自己的web服务
Apr 17 #Javascript
js如何准确获取当前页面url网址信息
Sep 13 #Javascript
基于javascript实现图片切换效果
Apr 17 #Javascript
非常棒的jQuery图片轮播效果
Apr 17 #Javascript
You might like
用PHP读取超大文件的实例代码
2012/04/01 PHP
仿dedecms下拉分页样式修改的thinkphp分页类实例
2014/10/30 PHP
在textarea文本域中显示HTML代码的方法
2007/03/06 Javascript
实现图片预加载的三大方法及优缺点分析
2014/11/19 Javascript
JavaScript 正则表达式中global模式的特性
2016/02/25 Javascript
jQuery回到顶部的代码
2016/07/09 Javascript
CodeMirror js代码加亮使用总结
2017/03/25 Javascript
BootStrap的双日历时间控件使用
2017/07/25 Javascript
AngularJs+Bootstrap实现漂亮的计算器
2017/08/10 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
JS实现中文汉字按拼音排序的方法
2017/10/09 Javascript
es6数据变更同步到视图层的方法
2019/03/04 Javascript
基于layui的table插件进行复选框联动功能的实现方法
2019/09/19 Javascript
vue element upload组件 file-list的动态绑定实现
2019/10/11 Javascript
layUI的验证码功能及校验实例
2019/10/25 Javascript
微信小程序wx.request的简单封装
2019/11/13 Javascript
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
2020/04/27 Javascript
JS如何实现手机端输入验证码效果
2020/05/13 Javascript
[08:54]DOTA2-DPC中国联赛 正赛 Aster vs LBZS 选手采访
2021/03/11 DOTA
Python生成数字图片代码分享
2017/10/31 Python
Python实现从log日志中提取ip的方法【正则提取】
2018/03/31 Python
在linux系统下安装python librtmp包的实现方法
2019/07/22 Python
python字符串替换re.sub()方法解析
2019/09/18 Python
python中的线程threading.Thread()使用详解
2019/12/17 Python
Python高阶函数、常用内置函数用法实例分析
2019/12/26 Python
Python虚拟环境的创建和包下载过程分析
2020/06/19 Python
python 实现百度网盘非会员上传超过500个文件的方法
2021/01/07 Python
详解CSS3中字体平滑处理和抗锯齿渲染
2017/03/29 HTML / CSS
实习单位接收函模板
2014/01/10 职场文书
三下乡活动方案
2014/01/31 职场文书
搞笑车尾标语
2014/06/23 职场文书
教师批评与自我批评范文
2014/10/15 职场文书
2015年监理个人工作总结
2015/05/23 职场文书
员工离职证明范本
2015/06/12 职场文书
2016婚礼主持词开场白
2015/11/24 职场文书
JavaScript严格模式不支持八进制的问题讲解
2021/11/07 Javascript