[JS] JS模块化开发之RequireJS
本节将简述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
1 2 3 4 5 6 7 8 9 10 | 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对象.
1 2 3 4 5 6 7 8 9 10 11 | define([ 'jquery' ], function ($) { var cache = {}; return { set: function (key, val) { cache[key] = val; }, get: function (key) { return cache[key]; } } }); |
main.js
1 2 3 4 5 6 7 8 | 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
1 2 3 4 5 6 7 8 9 | var cache = { data: {}, set: function (key, val) { this .data[key] = val; }, get: function (key) { return this .data[key]; } }; |
main.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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)
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 如果觉得还有帮助的话,可以点一下右下角的【推荐】,希望能够持续的为大家带来好的技术文章!想跟我一起进步么?那就【关注】我吧。
分类:
[04]JS
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
2015-07-26 [ORM] Entity Framework(2) CodeFirst进阶