本节将简述RequireJS常用的功能

RequireJS 实现了 Asynchronous Module API.

目录:

Nuget:Install-Package RequireJS(会包含2个文件.r.js是用来通过nodejs压缩js的)

为什么使用RequireJS

  • 加载script标签会停止响应
  • js文件存在依赖性
  • 模块化开发

加载RequireJS

  • 异步加载script

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

  • 加载自定义js

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

RequireJS函数

  • require.config({}):配置Require信息

包括baseUrl,paths,shim,map,enforceDefine

  • require([],funcLoad,funcErro):加载模块后,执行方法
  • define([],func):加载模块,定义模块

Hello World

  • 加载requirejs

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

  • 编写main.js
require.config({
baseUrl: 'Scripts',
paths: {
jquery: ['//cdn.bootcss.com/jquery/2.2.3/jquery', 'jquery-2.2.4']
}
}); require(['jquery'], function (a) {
alert(a.fn.jquery);
});
    • baseUrl默认与mainjs同一目录
    • paths支持多个js源
    • paths默认为地址加上.js
    • require第一个参数为依赖的模块
    • require第二个参数方法中的变量名依次与依赖模块一一对应

自定义模块

定义1个Cache模块,缓存页面中的js对象.

define(['jquery'], function ($) {
var cache = {};
return {
set: function (key, val) {
cache[key] = val;
},
get: function (key) {
return cache[key];
}
}
});

main.js

require(['cache'], function (cache) {
alert(jQuery.fn.jquery);
cache.set('a', 'hello');
}); require(['cache'], function (cache) {
alert(cache.get('a'));
});

引入第三方插件

很多js库  并没有支持AMD方式的模块化开发.

本例子实现上面的cache功能

定义cached.js

var cache = {
data: {},
set: function (key, val) {
this.data[key] = val;
},
get: function (key) {
return this.data[key];
}
};

main.js

require.config({
baseUrl: 'Scripts',
paths: {
jquery: ['//cdn.bootcss.com/jquery/2.2.3/jquery', 'jquery-2.2.4']
},
shim: {
cached: {
exports: 'cache',
deps: ['jquery']
}
}
}); require(['cached'], function (cache) {
cache.set('a', 'hello');
}); require(['cached'], function (cache) {
alert(cache.get('a'));
});
  • shim解决依赖与非AMD载入方式.
  • exports指定js中提供的对象或方法名.
  • deps指定依赖的js库

多版本js库处理

我们的项目如果使用新版本js功能,但又不能直接替换老版本的js.多个版本共存的时候.

使用map函数

requirejs.config({
map: {
'*': {
'jquery': 'scripts/jquery-2.2.4'
},
'scripts/cache': {
'jquery': '//cdn.bootcss.com/jquery/2.2.3/jquery.js'
}
}
}); require(['scripts/cache'], function (a) {
alert($.fn.jquery);
});

map定义了2种jquery版本

*表示默认情况下的jquery模块使用本地2.2.4

scripts/cache表示模块名为此的时候,jquery使用远程库.远程库需添加js扩展名.

RequireJS插件

https://github.com/requirejs/requirejs/wiki/Plugins

AMD(中文版):

https://github.com/amdjs/amdjs-api/wiki/AMD-(%E4%B8%AD%E6%96%87%E7%89%88)

[JS] JS模块化开发之RequireJS的更多相关文章

  1. Asp.net Mvc模块化开发之“开启模块开发、调试的简单愉快之旅”

    整个世界林林种种,把所有的事情都划分为对立的两个面. 每个人都渴望的财富划分为富有和贫穷,身高被划分为高和矮,身材被划分为胖和瘦,等等. 我们总是感叹,有钱人的生活我不懂;有钱人又何尝能懂我们每天起早 ...

  2. Asp.net Mvc模块化开发之“部分版本部分模块更新(上线)”

    项目开发从来就不是一个简单的问题.更难的问题是维护其他人开发的项目,并且要修改bug.如果原系统有重大问题还需要重构. 怎么重构系统不是本文探讨的问题,但是重构后如何上线部署和本文关系密切.这个大家可 ...

  3. 模块化开发之sea.js

    随着时间的推移,原生js越来越强大,es6中的improt,export已经可以实现模块化开发,但可惜的是现在的浏览器还不支持,需要进行编译,相信在不久的将来,一定会大行其道,今天我们来聊聊模块化开发 ...

  4. 模块化开发之sea.js实现原理总结

    seajs官网说:seajs是一个模块加载器,所以学习它并不难. 在我的理解就是:本来我们是需要手动创建 script标签 引入 js文件的,但用seajs后,它就自动帮我们完成这些工作. 这里只说实 ...

  5. 项目伪模块化开发之:requirejs(AMD)开发

    附:伪模块开发,终将会被es6的模块开发取代.其只为过渡阶段使用 一.为什么要用require.js? 最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了.后来,代码 ...

  6. HTML5+JS手机web开发之jQuery Mobile初涉

    一.起始之语 我一直都是在PC上折腾网页的,这会儿怎么风向周边捣鼓起手机网页开发呢?原因是公司原先使用Java开发的产品,耗了不少人力财力,但是最后的效果却不怎么好.因为,Android系统一套东西, ...

  7. 前端模块化开发之seaJs

    了解后端语言的童鞋一定听过模块化开发的概念,比如java.python等后端语言都有自己的模块化特性,然而和后端语言相比,javascript还尚未实现模块化的功能,虽然之后的更高版本可能引入模块化开 ...

  8. 模块化开发之Amd规范和Cmd规范

    CMD规范:是SeaJS 在推广过程中对模块定义的规范化产出的. AMD规范:是 RequireJS 在推广过程中对模块定义的规范化产出的 // CMD define(function(require ...

  9. 模块化开发之butterknife 在 library中使用

    在Android开发中butterknife是一个很好的对资源初始化的工具,它可以使你的代码简洁通俗易懂,同时配合Android ButterKnife Zelezny插件可以让你写代码的速度提升至少 ...

随机推荐

  1. 【Python】调用WPS V9 API,实现PPT转PDF

    WPS 的API,即COM,主要分为V8与V9两个版本,网上容易查到的例子,都是V8的. 现在官网上可以下载的,2013抢鲜版,就是V9的API. Python 调用COM 需要安装 Python f ...

  2. Sql Server tempdb原理-缓存机制解析实践

    Tempdb就像Sqlserver的临时仓库,各式各样的对象,数据在里面进行频繁计算,操作.大量的操作使得tempdb可能面临很大压力,tempdb中缓存的设计就是为了缓解这些压力.这次就为大家介绍下 ...

  3. 控件UI性能调优 -- SizeChanged不是万能的

    简介 我们在之前的“UWP控件开发——用NuGet包装自己的控件“一文中曾提到XAML的布局系统 和平时使用上的一些问题(重写Measure/Arrange还是使用SizeChanged?),这篇博文 ...

  4. Portal for ArcGIS安装指南

    参考帮助: http://resources.arcgis.com/en/help/install-guides/arcgis-portal-windows/10.2/index.html#/Inst ...

  5. gtest 1.7编译错误:std:tr1:tuple模板参数过多的解决方案

    在gtest/gtest.h文件中添加如下代码 #define _VARIADIC_MAX 10

  6. Windows Azure Service Bus Notification Hub推送通知

    前言 随着Windows Azure 在中国的正式落地,相信越来越多的人会体验到Windows Azure带来的强大和便利.在上一篇文章中, 我们介绍了如何利用Windows Azure中的Servi ...

  7. [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之灯光介绍Lights

    [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之灯光介绍Lights 既上一篇分享了中文字幕的摄像机介绍Cameras后,本篇分享一下第2个已完工的 ...

  8. 微软 Build 2016年开发者大会发布多项功能升级

    微软Build 2016开发者大会在美国旧金山的莫斯康展览中心开幕.本次大会对一些重点功能进行了完善.如手写笔支持技术Windows Ink.语音识别Cortana应用集(Cortana Collec ...

  9. 人机大战之AlphaGo的硬件配置和算法研究

    AlphaGo的硬件配置 最近AlphaGo与李世石的比赛如火如荼,关于第四盘李世石神之一手不在我们的讨论范围之内.我们重点讨论下AlphaGo的硬件配置: AlphaGo有多个版本,其中最强的是分布 ...

  10. select2初始化默认值

    之前用select2初始化默认值使用了select2('val','1'),这样做没问题,但只能用在单选上,多选的话,即使将val后面的值改成数组['0', '2']这种形式也没用. <scri ...