前言

之前在公司用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. JOISC 2023 纪录

    记录一下 JOISC 2023 的做题记录 Day1 T1 Two Currencies 给定一棵树,在边上有总计 \(m\) 个检查站,经过一个检查站需要叫 \(1\) 枚金币或者若干枚银币.\(Q ...

  2. Burnside引理和Pólya定理

    不想写很多冗杂的群论定义,所以本博客不是用来入门的. 如果你想要入门,请点这里. 概要 对于一个作用在集合 \(X\) 上的有限群 \(G\) ,对于每个 \(g\in G\) 令 \(X^g\) 表 ...

  3. CF1829H Don't Blame Me

    题目链接 题解 知识点:线性dp,位运算. 考虑设 \(f_{i,j}\) 表示考虑了前 \(i\) 个数字,与和为 \(j\) 的方案数.转移方程显然. 注意初值为 \(f_{0,63} = 1\) ...

  4. java.lang.System快速指南

    1.介绍 在本教程中,我们将快速了解java.lang.System类及其特性和核心功能. 2.IO 系统类是java.lang的一部分,它的一个主要特性是让我们能够访问标准的I/O流. 简单地说,它 ...

  5. SpringBoot+Shiro+LayUI权限管理系统项目-9.核心知识点总结

    1.说明 本篇讲一下本项目几个重要的知识点,详细看源码,文章下方捐赠或QQ联系捐赠获取. 2.Shiro如何设置密码加密算法 1.在shiro配置文件中添加: @Bean public HashedC ...

  6. jenkins配置github秘钥

    1.登录github,打开Settings 2.点击Developer settings 3.点击Personal access tokens-->Generate new token 4.勾选 ...

  7. 负载均衡load balancing和算法分类概要介绍

    一.负载均衡介绍 1.1 什么是负载均衡 负载均衡(load balancing) 它是计算机的一种技术,用来在计算机集群.网络连接.CPU.磁盘驱动器或其他资源中分配负载,以达到优化资源使用.最大化 ...

  8. 分发函数singledispatch

    import functools @functools.singledispatch() def myfunc(arg): print("default myfunc({!r})" ...

  9. offline RL | 读读 Decision Transformer

    论文标题:Decision Transformer: Reinforcement Learning via Sequence Modeling,NeurIPS 2021,6 6 7 9 poster( ...

  10. 矩池云 | GPU 分布式使用教程之 Pytorch

    GPU 分布式使用教程之 Pytorch Pytorch 官方推荐使用 DistributedDataParallel(DDP) 模块来实现单机多卡和多机多卡分布式计算.DDP 模块涉及了一些新概念, ...