1. 使用require.js的意义

 
(1)实现JS文件的异步加载,避免网页因为加载JS文件缓慢造成网页未响应
(2)管理模块之间的依赖性,便于代码的编写和维护。页面中只需要引入require.js和main.js,其余的js文件全部通过require.js管理。

 
2. 获取require.js
 

3. 使用require.js

把require.js放入项目的js目录下:

我们需要在html页面中引入require.js:

1 <script src="js/require.js" type="text/javascript" charset="utf-8" defer="defer" async="async"></script>

接下来,在js目录下新建我们的入口js文件,我们把它命名为“main.js”。这个文件就相当于java语言中的main函数,是整个js模块体系的入口,我们在main.js中引用我们需要依赖的js文件。

在刚刚引入require.js的script标签中添加一行一个data-main属性,并赋值为“js/main”。

1 <script src="js/require.js" data-main = "js/main" type="text/javascript" charset="utf-8" defer="defer" async="async"></script>

这个属性的值就是指定main.js文件的路径,可以省略.js后缀。


4. 如何配置main.js文件
完成了准备工作,接下来看我们可以在main.js中可以干什么。
(1)写js
我们可以直接在main.js中编辑javaScript代码:
1 // main.js
2 console.log("main.js被执行");

(2)引入依赖模块(require()函数)
- 加入要引入的依赖模块和main.js在同一层目录,可以直接使用模块文件名。
1 require(['firstModule','secondModule','thirdModule'],function(firstModule,secondModule,thirdModule){
2 //模块加载完成后执行的回调函数
3 });
- 如果我们需要手动配置模块文件路径,使用require.config()方法。
该方法需要写在main.js文件的头部:
1 require.config({  // main.js文件的路径是js/main.js
2 paths:{
3 "firstModule":"lib/firstModule.js" // 路径是js/lib/firstModule.js
4 "secondModule":"lib/secondModule.js" // 路径是js/lib/secondModule.js
5 "thirdModule":"lib/thirdModule.js" // 路径是js/lib/thirdModule.js
6 }
7 });

我们发现这三个依赖的js文件都在js目录下的lib目录下,为了书写简单,我们可以设置“基目录”:

1 require.config({  // main.js文件的路径是js/main.js
2 baseUrl:"js/lib",
3 paths:{
4 "firstModule":"firstModule.js" // 路径是js/lib/firstModule.js
5 "secondModule":"secondModule.js" // 路径是js/lib/secondModule.js
6 "thirdModule":"thirdModule.js" // 路径是js/lib/thirdModule.js
7 }
8 });

我们发现这样写有一个问题,就是依赖几个js模块,就得发送几次js请求,require.js针对这个问题有一个优化工具,可以把多个模块合并在一个文件中,减少js请求。这个等我了解之后再单独说... ...


5. 接下来,我们看一个完整的使用AMD写法实现的模块加载到调用执行的例子:

目录结构如下:

 1 /*
2 * js/lib/dates.js
3 */
4 define(function(){
5 let date = new Date();
6 let outDate = function(){
7 console.log(date.getDate());
8 };
9 return {
10 outDate:outDate
11 };
12 });
13
14
15
16 /*
17 * js/main.js
18 */
19 require(['lib/dates'],function(dates){
20 dates.outDate();
21 });

执行结果:


6. 如何加载没有使用AMD规范的模块(没有使用define()函数定义)

方法:使用require.config()方法的shim属性配置。
以jquery.scroll插件为例演示:
1 shim:{
2 "jquery.scroll":{
3 deps:['jquery'],
4 exports:'jQuery.fn.scroll'
5 }
6 }
- deps : 是一个数组,表明该模块依赖的模块
- exports : 表明模块外部调用该模块时的变量名
 

JavaScript模块化思想requireJS的使用的更多相关文章

  1. JavaScript模块化思想之入门篇

    在写正文之前先写一点废话,从我大三下学期正式接触前端到现在,已经六个月了.自己从HTML,CSS,简单的JS验证开始,一点点开始走入前端的世界.越发的感觉前端这一领域散发着无穷的魅力,也许这和我真心喜 ...

  2. Javascript 模块化编程 --RequireJs

    什么是模块化 模块就是实现特定功能的一组方法,常见的几种js写法 原始写法 function A() { } function B() { } 上面函数A()和B()组成一个模块,使用的时候直接调用就 ...

  3. JavaScript模块化思想

    1. 首先,我们需要明白为什么要用模块化? 功能都是为了解决需求的.模块化可以带来的优点有以下几点: (1)可维护性.举个例子,如果我们把未使用模块化的代码比作油和水混合在了一起,模块化之后的代码就好 ...

  4. JavaScript模块化思想之CommonJS、AMD、CMD、UMD

    前一篇文章了解了什么是模块,这一篇就简单介绍一下如何定义并加载一个模块. 我所了解的三种模块加载方式分别是CommonJS.AMD和CMD 网上关于这三种模块加载方式讲解的文章很多,我就简单的做个介绍 ...

  5. JavaScript 模块化简述

    JavaScript 模块化简述 前言 关于模块化,最直接的表现就是我们写的 require 和 import 关键字,如果查阅相关资料,就一定会遇到 CommonJS .CMD AMD 这些名词,以 ...

  6. JavaScript 模块化简析

    关于模块化,最直接的表现就是我们写的 require 和 import 关键字,如果查阅相关资料,就一定会遇到 CommonJS .CMD AMD 这些名词,以及 RequireJS.SeaJS 等陌 ...

  7. Javascript模块化开发,使用模块化脚本加载工具RequireJS,提高你代码的速度和质量。

    随着前端JavaScript代码越来越重,如何组织JavaScript代码变得非常重要,好的组织方式,可以让别人和自己很好的理解代码,也便于维护和测试.模块化是一种非常好的代码组织方式,本文试着对Ja ...

  8. JavaScript模块化编程之AMD - requireJS基础使用

    JavaScript模块化编程之AMD requireJS基础使用 标签(空格分隔): JavaScript 参考文章 AMD规范 AMD是"Asynchronous Module Defi ...

  9. javascript模块化编程思想、实现与规范

    随着BS架构的发展,网站逐渐变成了互联网应用程序,嵌入网络的JavaScript代码越来越庞大,越来越复杂(业务逻辑处理或用户交互很多写在前端).网页越来越像桌面程序,需要一个团队分工协作.进度管理. ...

随机推荐

  1. [工具配置]requirejs 多页面,多入口js文件打包总结

    需要明确以下几点: 1.本地前端调试代码肯定是调用原始的路径以及代码,但是线上运行的肯定是通过打包后的另一个路径,这儿就是生成的dist文件夹了. 2.requirejs的引入,线上跟线下的路径怎么控 ...

  2. Django之django模型层一单表操作

    一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人 ...

  3. 如何获取view的大小

    很多初学者都会犯一个错误 ,就是在onCreate或者onStart里面去获取view的大小,然而这样获取到的宽高通常都是0,为什么呢?因为view的测量过程和activity的生命周期不是同步的,因 ...

  4. C# 动态加载程序集信息

    本文通过一个简单的实例,来讲解动态加载Dll需要的知识点.仅供学习分享使用,如有不足之处,还请指正. 在设计模式的策略模式中,需要动态加载程序集信息. 涉及知识点: AssemblyName类,完整描 ...

  5. Android-垂直滑动的ViewPager

    该ViewPager和正常的ViewPager的使用方式是一样的,只不过是垂直滑动的. 下面是这个ViewPager的代码 /** * 垂直滑动的ViewPager */ public class V ...

  6. 整理一些.net core中的错误代码

    在hosting .net core时,有些错误代码并不容易理解. 作为标记,方便查询,这些错误代码可能不会出现在VS的错误查找工具里,也不会出现在错误代码转字符描述的函数里. COR_E_AMBIG ...

  7. OPPO A57 刷机(官方安装包)+完美Root+ 破解主题+屏蔽Root顶部红色框+NV修复

    朋友说她的手机被被人刷后,有许多预装的软件问我能不能处理下,让我装个纯净版. 开机可以看到预装了许多软件,通常想要删除预装软件就必须Root,于是下载刷机精灵,360刷机大师,线刷包之类的软件Root ...

  8. BM:EOS的创造者

    2018年6月EOS的主网即将上线,EOS到底是全球骗局,还是技术创? EOS币到底能涨到几何,现在还适合不适合入手...我们暂且不说.先了解一下EOS的创造者BM,以及BM的传奇经历. BM BM是 ...

  9. Linux atop 监控系统状态

    atop是一个功能非常强大的linux服务器监控工具,它的数据采集主要包括:CPU.内存.磁盘.网络.进程等,并且内容非常的详细,特别是当那一部分存在压力它会以特殊的颜色进行展示,如果颜色是红色那么说 ...

  10. layui中radio的动态加载(进入修改页面时,设置radio)

    动态设置   radio  的值让它处于选中状态 效果图 : 前端代码: <div class="layui-form-item"> <label class=& ...