前言

之前在公司用JS写前端页面,本来自己是一个写后端的,但是奈何人少,只能自己也去写了。但是自己对前端基本不懂,基本就是照着前人写的照着抄,反正大体意思是明白的,但是出现问题了,基本上也是吭哧吭哧好几天,也能解决,但是由于自己对前端这一套是一点都不懂,导致效率很低,而且经常返工。后来稍微学习了一波,了解了这个AMD规范和require.js。

因为公司用的是这个require.js,所有这里就好好的把这个require.js总结一下,只为工作需要。

下面我通过三个模块来把整个知识点穿起来。

  • calculator.js:定义calculator模块
  • author.js:定义author模块
  • main.js:主模块,依赖calculator模块和author模块

定义无依赖的模块

定义无依赖的模块语法如下:

define(function() {
return 导出的内容
})

样例代码:

// calculator.js
define(function() {
    // 欢迎关注微信公众号:果冻想
    let add = function(x, y) {
        return x + y;
    };     let sub = function(x, y) {
        return x - y;
    };     let multi = function(x, y) {
        return x * y;
    };     let div = function(x, y) {
        return x / y;
    };     // 对外暴漏模块
    return {
        add: add,
        sub: sub,
        multi: multi,
        div: div
    }
});

再来一个模块定义,方便下面依赖引入:

// author.js
define(function() {
    let name = "果冻想";
    let sex = "男"     function getName() {
        return name;
    };     function getSex() {
        return sex;
    };     return {
        getName: getName,
        getSex: getSex
    }
});

定义有依赖的模块

定义有依赖的模块语法如下:

define(["module1", "module2"], function(m1, m2) {
return 模块
})

样例代码:

// main.js,分别依赖上面的calculator和author模块
define([
    'calculator',
    'author'
], function(calculator, author) {
    console.log(calculator.add(1, 1));
    console.log(calculator.sub(5, 2));
    console.log(calculator.multi(2, 3));
    console.log(calculator.div(4, 2));
    console.log(author.getName());
    console.log(author.getSex());
});

使用模块

使用require.js的第一步,是先去官方网站下载最新版本。下载后,假定把它放在js子目录下面,就可以加载了。下载地址:Download RequireJS

<script src="js/require.js"></script>

其实,加载这个文件,也有可能会造成网页失去相应,我们一般的做法是把这个加载语句放在网页的底部加载;其实,还有另一个方案,可以这个样子:


<script src="js/require.js" defer async="true" ></script>

async属性表明这个文件需要异步加载,避免网页失去响应。IE不支持这个属性,只支持defer,所以把defer也写上。

加载require.js以后,下一步就要加载我们自己的代码了。

<script src="js/require.js" data-main="js/main"></script>

data-main属性的作用是指定网页程序的主模块。在上例中,就是js目录下面的main.js,这个文件会第一个被require.js加载。由于require.js默认的文件后缀名是js,所以可以把main.js简写成main。

这样,我们的代码就可以直接在浏览器中运行喽。

模块的加载

默认情况下,require.js会默认认为模块与data-main指定的文件在同一个目录下,然后自动加载它们。有的时候,这些模块都不在一个目录下,又或我们在加载模块时,想对模块进行重命名,这些肿么搞?

这些我们都可以使用require.config()方法,我们可以对模块的加载行为进行自定义。比如这个样子:

require.config({
  baseUrl: "js/lib",
    paths: {
      "jquery": "https://xxx/jquery.min",
      "underscore": "underscore.min",
      "backbone": "backbone.min"
    }
});

baseUrl是可以直接定义基目录。

非标准模块的加载

对于那些遵循AMD规范的模块,使用require.js来加载,当然是非常舒服的了;即使很多流行的函数库符合AMD规范,但是仍有很多库并不符合,针对这些不符合的库,我们该如何使用呢?

针对这些不符合AMD规范的模块,需要使用时,仍是需要在require.config中进行配置。require.config()接受一个配置对象,这个对象除了有前面说过的paths属性之外,还有一个shim属性,专门用来配置不兼容的模块,具体配置字段说明如下:

  • exports值(输出的变量名),表明这个模块外部调用时的名称;
  • deps数组,表明该模块的依赖性。

比如,jQuery的插件可以这样引入:

shim: {
  'jquery.scroll': {
    deps: ['jquery'],
    exports: 'jQuery.fn.scroll'
  }
}

总结

好了,关于AMD和CommonJS就总结到这里了,希望对大家有帮助。

AMD、request.js,生词太多,傻傻搞不清的更多相关文章

  1. JS魔法堂:属性、特性,傻傻分不清楚

    一.前言 或许你和我一样都曾经被下面的代码所困扰 var el = document.getElementById('dummy'); el.hello = "test"; con ...

  2. 傻傻分不清之 Cookie、Session、Token、JWT

    傻傻分不清之 Cookie.Session.Token.JWT 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证明“你是你自己”(比如:你每天上下班打卡,都需要通过指纹打 ...

  3. cookie、session,、token,还在傻傻分不清?

    摘要:session 和 token 本质上是没有区别的,都是对用户身份的认证机制,只是他们实现的校验机制不一样而已. 本文分享自华为云社区<Session/Cookie/Token 还傻傻分不 ...

  4. MVP MVC MVVM 傻傻分不清

    最近MVC (Model-View-Controller) 和MVVM (Model-View-ViewModel) 在微软圈成为显学,ASP.NET MVC 和WPF 的Prism (MVVM Fr ...

  5. 【华为敏捷/DevOps实践】7. 敏捷,DevOps,傻傻不分清楚【华为云技术分享】

    文:姚冬(华为云DevCloud首席技术布道师,资深DevOps与精益/敏捷专家,金融解决方案技术Leader,中国DevOpsDays社区核心组织者) 前言 敏捷是什么?DevOps是什么?两者有什 ...

  6. JDBC、ORM、JPA、Spring Data JPA,傻傻分不清楚?一文带你厘清个中曲直,给你个选择SpringDataJPA的理由!

    序言 Spring Data JPA作为Spring Data中对于关系型数据库支持的一种框架技术,属于ORM的一种,通过得当的使用,可以大大简化开发过程中对于数据操作的复杂度. 本文档隶属于< ...

  7. How to use Request js (Node js Module) pools

    Can someone explain how to use the request.js pool hash? The github notes say this about pools: pool ...

  8. Java:接口和抽象类,傻傻分不清楚?

    01. 来看网络上对接口的一番解释: 接口(英文:Interface),在 Java 编程语言中是一个抽象类型,是抽象方法的集合.一个类通过继承接口的方式,从而来继承接口的抽象方法. 兄弟们,你们怎么 ...

  9. [转帖]十分钟快速理解DPI和PPI,不再傻傻分不清!

    十分钟快速理解DPI和PPI,不再傻傻分不清! https://baijiahao.baidu.com/s?id=1605834796518990333&wfr=spider&for= ...

  10. OCA,OCP,OCM傻傻分不清?

    可能大家知道OCA.OCP.OCM的关系是一个比一个难考,一个比一个含金量高,但是你知道具体的考试科目.考试方式.就业形势区别吗?不知道的话这篇通俗易懂的文章会让你一目了然. 区别一:含金量 ■OCA ...

随机推荐

  1. POJ1080 滑雪

    题目链接 题目 Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Mi ...

  2. OpenWrt 21.02.2 记录: PPPoE, Wireguard

    OpenWrt 21.02 OpenWrt 21.02.2 是 OpenWrt 当前最新的稳定版, 内核 5.4.179, 这个内核已经内置了 Wireguard 模块 root@OpenWrt:~# ...

  3. Springboot+Vue+ElementUI实现的宿舍管理系统

    项目说明 doman是一个基于Springboot+Vue实现的前后端分离的宿舍管理系统.项目为本人亲手打造,需要的朋友可以拿去做个修改也是不错的.大神请忽略:) 项目功能 详细请看功能演示: Spr ...

  4. wordpress设置固定链接404及伪静态配置

    说明 最近在将wordpress设置中文章url修改为月份和名称型 之后访问文章出现404.原因是配有配置好apache的伪静态. 配置步骤 1.修改httpd.conf 我这里是centos7,默认 ...

  5. jsp中无法识别EL表达式问题

    今天在开发系统时需要在JSP中遍历List<javabean>,其中用到了EL表达式:${item.value} 页面死活不出数据,只显示表达式本身:${item.value}. 页面代码 ...

  6. redis7源码分析:redis 单线程模型解析,一条get命令执行流程

    有了下文的梳理后 redis 启动流程 再来解析redis 在单线程模式下解析并处理客户端发来的命令 1. 当 client fd 可读时,会回调readQueryFromClient函数 void ...

  7. crontab采坑总结

    目录 crontab环境变量 脚本缺少执行权限 crontab是Linux平台实现定时任务的服务工具,通常情况下该服务会预装在发行版中,直接使用即可. 关于crontab的详细用法参考:https:/ ...

  8. NamedTuple技巧用法

    PS: 第一眼看到这个代码的时候,就联想到了go中的构造函数,虽然知道go中的构造函数其实就类比于python中的构造函数__init__,但是不得不说,这个太像了 在日常编码中,我们经常需要写一些返 ...

  9. java图书管理系统界面版本+mysql数据库

    描述: java+mysql数据库实现的图书管理系统,实现了图书添加,图书删除,图书修改,图书查看,图书列表查看等,用户增加,用户删除.用户修改,用户查看等 功能: 图书管理功能:图书添加,图书删除, ...

  10. 【LeetCode数组#2双指针法】移除元素、删除有序数组中的重复项、移动0

    移除元素 力扣27题目链接(opens new window) 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度. 不要使用额外的数组 ...