首页 > 其他分享 >AMD、request.js,生词太多,傻傻搞不清

AMD、request.js,生词太多,傻傻搞不清

时间:2024-03-24 21:13:59浏览次数:32  
标签:function require request AMD js 生词 模块 calculator 加载

前言

之前在公司用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就总结到这里了,希望对大家有帮助。

标签:function,require,request,AMD,js,生词,模块,calculator,加载
From: https://www.cnblogs.com/vipygd/p/18093051

相关文章

  • Kubernetes客户端认证(三)—— Kubernetes使用CertificateSigningRequest方式签发客户端
    1、概述在《Kubernetes客户端认证(一)——基于CA证书的双向认证方式 》和《Kubernetes客户端认证(二)——基于ServiceAccount的JWTToken认证》两篇博文中详细介绍了Kubernetes客户端认证方式,包括以证书方式访问的普通用户或进程(运维人员及kubectl、kubelet等进程);以Service......
  • Requestium把requests按在地上摩擦
    From: https://mp.weixin.qq.com/s/XRiYpXvvMW7fGpMgPN39Aw----------------------------------------------------------------------------------------在Python编程中,处理网络请求是一个常见的任务,特别是做爬虫采集数据。最受欢迎的是Requests和Selenium。而Requestium......
  • 爬虫----084-86requests基本使用及get,post请求
    基本使用importrequestsurl='http://www.baidu.com'response=requests.get(url=url)#一个类型和6个属性#print(type(response))#Response类型#设置响应地编码格式response.encoding='utf-8'#以字符串形式返回网页源码#print(response.text)#......
  • 前端报错 request to https://registry.npm.taobao.org/yorkie/download/yorkie-2.0.0
    前端npminstall报错:npmERR!requesttohttps://registry.npm.taobao.org/yorkie/download/yorkie-2.0.0.tgzfailed,reason:certificatehasexpired解决方式://1.清空缓存npmcacheclean--force//2.切换新源:npmconfigsetregistry镜像源npmconfig......
  • 模型数据-如何放入request域中
    自动放入request域中springmvc会自动把获取的model模型,放入到request域中验证代码后端获取了master对象,这时就自动的把对象传到request域中了,为了验证这个猜想,我们需要从前端的jsp中看是否可以在request中取到master。//验证自动放入request域@RequestMapping("......
  • ASPNET MVC POST DELETE PUT 请求返回 400 (Bad Request)
    近日遇到 POSTDELETEPUT请求返回400(BadRequest),而GET请求正常的情况经几日排查,发现是【防止ASP.NETMVC应用程序中的跨站点请求伪造(CSRF)攻击】导致的解决方法:在请求头中加入 RequestVerificationToken@injectMicrosoft.AspNetCore.Antiforgery.IAntif......
  • JDBC Connection Configuration+JDBC Request
    使用场景针对数据库做性能测试获取数据库表内数据关联使用性能测试背景高并发访问:数据库系统在高并发访问情况下可能遇到性能瓶颈,如响应时间延长、连接耗尽等。通过压测可以评估数据库在高并发负载下的性能表现。复杂查询:某些复杂查询可能会对数据库性能造成影响,例如涉及......
  • 7*24h新闻自动发送至微信(requests+pywinauto)
    7*24h新闻自动发送至微信(requests+pywinauto)1.爬取新闻列表2.发送至微信指定联系人1.爬取新闻列表目标地址:https://kuaixun.eastmoney.com/获取新闻列表importtime,requests,jsonimportpandasaspdsession=requests.session()headers={'User-Agent'......
  • Qt信号 lamda 表达式使用
    对于Qt信号的绑定,有几种方式:1.标准的SIGNAL和SLOT的绑定方式; 例如:connect(qApp,SIGNAL(focusChanged(QWidget*,QWidget*)),this,SLOT(focusChanged(QWidget*,QWidget*)));//qApp为发送者,this类为接收者;focusChanged为发送者发送的信号,fo......
  • Requests请求方式有那些吗?这篇就够了
    Requests请求方式有那些吗?这篇就够了使用Python的requests库,您可以进行多种类型的HTTP请求.以下是一些常见的请求方式:GET请求:response = requests.get(url)POST请求:response = requests.post(url, data=data)PUT请求:response = requests.put(url......