简单的说一下AMD是"Asynchronous Module Definition"的缩写,意思就是"异步模块定义"。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。

require.js作用

  • 实现js文件的异步加载,避免网页失去响应;
  • 管理模块之间的依赖性,便于代码的编写和维护。

首先引入requireJS文件,并在script标签上指定入口文件(主模块):

<head>
<meta charset="UTF-8">
<title>javascript模块化编程</title>
</head>
<body>
<script type="text/javascript" src="https://cdn.bootcss.com/require.js/2.3.5/require.js" defer async data-main="js/main.js"></script>
</body>

接下来需要对main.js进行一些配置:

// 模块加载的配置
require.config({
// 基目录 如果每个模块不在一个基目录
// 不使用baseUrl直接在paths中具体指定
baseUrl: "lib",
paths: {
'jquery': 'jquery',
'vue': 'vue.min',
'pagination': 'my-pager'
},
// shim属性 专门用来配置不兼容的模块 每个模块要定义:
// (1) exports值(输出的变量名)表明这个模块外部调用时的名称
// (2) deps数组 表明该模块的依赖性
// 比如jq的插件可以这样定义
shim: {
'jquery.scroll': {
deps: ['jquery'],
exports: 'jQuery.fn.scroll'
}
}
// requireJS还有一系列插件 不再赘述
// [Plugins](https://github.com/requirejs/requirejs/wiki/Plugins)
});
// 主模块依赖于其它模块,这时就需要使用AMD规范定义的require()函数
// require([modules], function (modules) { });
require(['jquery', 'vue', 'pagination'], function ($, Vue, pagination) {
console.log($);
console.log(Vue);
console.log(pagination);
});

关于自己定义符合AMD规范的模块,比如上面例子中的pagination:

(function (factory) {
if (typeof exports === 'object') {
// Node/CommonJS
factory(require('document'), require('window'));
} else if (typeof define === 'function' && define.amd) {
// AMD
define(factory(document, window));
} else {
// Browser globals
factory(document, window);
}
}(function (document, window) {
var Test = {
a: 1
}
if (typeof module != 'undefined' && module.exports) {
module.exports = Test;
} else if (typeof define == 'function' && define.amd) {
define(function () { return Test; });
} else {
window.Test = Test;
}
}));

原文地址:https://segmentfault.com/a/1190000016913752

最新文章

  1. Struts2环境下Tomcat启动异常:Exception starting filter struts2,报了一个java.lang.ClassNotFoundException
  2. js自调用匿名函数的三种写法
  3. iOS开发——UI进阶篇(十五)Quartz2D介绍
  4. zookeeper中Watcher和Notifications
  5. selenium判断元素类型
  6. django - django 承接nginx请求
  7. ubuntu下编译内核驱动。
  8. 从零开始nodejs系列文章
  9. [LeetCode]题解(python):137-Single Number II
  10. ubuntu开机自动关闭独显,使用集成显卡
  11. JavaFx 中常见的包和类(javafx笔记 )
  12. Sql server中 如何用sql语句创建视图
  13. DevExpress使用方法GridControl总结
  14. spring学习 十一 AspectJ-based的通知入门 不带参数的通知
  15. poj2679
  16. Esper学习之一:Esper介绍
  17. js小练习
  18. 2019第十届蓝桥杯C++B组题解(赛后重写的,不确保答案正确性,仅供参考)
  19. 求二叉树的深度 python
  20. gridView删除提示框

热门文章

  1. POJ 2002 Squares【值得摸索的一道二分+点旋转】
  2. java editor template Eclipse中的快速Java\JavaScript代码模板使用
  3. [Javascript Crocks] Recover from a Nothing with the `alt` method
  4. 17229 Lry,你除了2还是2
  5. java生成一张图片
  6. hdu1829 A Bug's Life(并查集)
  7. BZOJ 1005 [HNOI2008]明明的烦恼 purfer序列,排列组合
  8. ProjectRuler 算法练习之 位数组成字符串同样的整数
  9. Arduino-1602-LiquidCrystal库
  10. Centos7中 文件大小排序