Dojo第三方库依赖关系的管理——use.js实现
来源:互联网 发布:three.js空调贴图 编辑:程序博客网 时间:2024/06/05 06:53
Dojo是一个用javascript语言实现的开源DHTML工具包。它是在几个项目捐助基础上建立起来的(nWidgets,Burstlib,f(m)),这也是为什么叫它a”unified”toolkit的原因。Dojo的目标是解决开发DHTML应用程序遇到的那些,长期存在、历史问题(historical problems with DHTML)。跨浏览器问题。
前言
在早期(2004年开始),dojo是一个优秀的项目,它提供了众多的组件,能够十分方便的开发出交互的用户界面,同时它提供了统一的API,能够编写统一,兼容性高的web程序。然而,随着近些年web技术的快速发展,各种轻便,模块化,组件化的JS库如雨后春笋般涌出,dojo逐渐显得有些笨重和落后了。但是在GIS圈里,如果你做webGIS开发,并且使用到了ArcGIS API for JavaScript库的话,dojo就是你越不过的坎,因为ArcGIS API for JavaScript库便是基于Dojo开发的。
Dojo第三方模块依赖关系中的问题
Dojo提倡模块化开发,同时内部实现了AMD标准的JS模块化开发方法,通过define
和require
来实现模块的定义和引用,一个标准的dojoConfing代码如下所示:
var dojoConfig ={ async: true, isDebug: false, parseOnLoad: true, paths: {}, packages: []}
一般情况下,dojo是够用的,因为它实现了从DOM操作到Web组件以及JS类等一系列API的封装,基本上只使用这一个库就够了,所以它没用定义如何管理第三方组件的依赖关系,如果你引用了bootstrap样式,那么在引入bootstrap.js之前,你得先引用jQuery.js,因为bootstrap依赖jquery,那么,你在dojo中就没法管理这种关系,如果你说这样定义
define(['jquery','bootstrap'],function(){})
这样得也是不可以的,因为各种包的引入是异步的,你无法确定jquery.js文件在bootstrap.js文件之前已经被浏览器加载了,因此,你必须确定bootstrap在jquery之后才加载,然而Dojo并没有对这种关系的处理办法。
RequireJS的处理办法
在另一个JS模块化管理库requirejs中,它对第三方依赖关系的管理有着直接的解决办法:deps
,在模块定义中便可直接定义模块的依赖关系,在加载一个模块前,首先确保它所依赖的库已经被加载,在requireJS的config文件中,可以如下定义:
requirejs.config({ baseUrl: '' shim: { "bootstrap": { "deps": ['jquery'] } }, paths: {}, packages: []});
在deps中便可明确定义模块间的依赖,那么在bootstrap被加载前,它会先确保jquery已经被加载,那么如何在dojo中解决这个问题呢。
Dojo中第三方模块依赖的解决——use.js
dojo真是一个古老的库,中文的资料实在是少,而且某度真的不太好用,搜来搜去满页都是一篇博文在几个网站上的转载。最终经过几小时的Google,以及在StackOverflow上的寻找,终于发现也有网友遇到过同样的问题。在StackOverflow上,有大神指出,可以实现一个自己的模块加载器,通过使用dojo的Deffered
方法,同时使用promise
确保一个模块在另一个模块后面加载,内部使用require
。另一个大佬直接给出了use.js开源库,通过usejs来实现对第三方模块的管理。
useJS仓库中对它描述为,在默认的AMD加载程序不知道如何加载未使用AMD语法的JS库,它能够运行您正确管理模块的依赖关系,并将指定的全局变量附加到模块中导出。它实现了类似requireJS中的deps
和exports
。在dojo中,我们可以这样使用:
1.首先,确保dojo模块加载器为异步的:
<script data-dojo-config="async:1" src="dojo/dojo.js"></script>
2.config文件如下定义:
require({ paths: { "module/a": "/path/to/module/a", "module/b": "/path/to/module/b", "use": "path/to/use" }, use: { "module/a": { deps: ["module/b"], attach: "A" } }});
3 最后在模块中可以这样引用模块a:
require(["use!module/a"], function(A) { console.log(A); // is A!});
useJS库的代码十分简单,加上注释总共110行,在代码中它主要实现了load和write两个方法,这其实就是Dojo插件库的写法,dojo本身就有着dojo/text
,dojo/has
,dojo/load
等插件,关于编写自己的dojo插件,网上教程实在太少,对于这些我也没有弄得很明白,毕竟dojo在国内已经没用那么常用了,希望这些能帮助到需要的人。
总结:使用use.js能够解决dojo第三方模块的依赖。
- Dojo第三方库依赖关系的管理——use.js实现
- ios,使用CocoaPods做第三方库的依赖管理
- Node.js 第三方包的安装、升级、卸载,以及包依赖管理
- 依赖第三方的动态库
- 关于npm安装node.js第三方依赖的问题
- Cocoapods 第三方依赖库管理使用介绍
- 关于xcode8的建立依赖其他第三方库(cocoapods管理)的静态库framework
- Ember.js 入门指南——管理controller之间的依赖关系
- android_studio的第三方依赖
- android依赖第三方库
- pyspark依赖第三方库
- Bower —— 管理你的客户端依赖关系
- CocoaPods-第三方库的管理利器
- 第三方JS库
- QtCreator的中如何使用第三方依赖库
- Hadoop运行包含第三方依赖库的MapReduce作业
- android studio导入第三方依赖库遇到的问题
- android studio使用依赖引入第三方库的路径
- emmm开始我的博客世界
- ZYNQ入门闪灯
- centos7 搭建ha(高可用)hadoop2.7.3集群
- 计算单词的频率
- Android Studio混淆模板及常用第三方混淆(看了都说好)
- Dojo第三方库依赖关系的管理——use.js实现
- Mac编译vlc-android
- 索引
- linux之yum源安装
- django 开发初步
- Android混淆及多渠道打包总结
- 1057: [ZJOI2007]棋盘制作
- 详细jekyll搭建GitHub pages教程
- okio 1.13.0 学习笔记