web前端.js--seajs--非CMD模块的javascript文件兼容封装方案
2015-01-12 19:18
344 查看
随着网站前台页面设计越来越花哨,其实现逻辑也越来越复杂。javascript库百花齐放,各种插件也层出不穷,在使用中,管理各种js文件依赖成为了一个令人头疼的问题。因此我们需要用软件工程的方式来编写javascript“程序”,即模块化编程。在制定中的ECMAScript第六版,也将引入模块这一概念。
目前常见的javascript模块规范有以RequireJS为代表的AMD规范和以SeaJS为代表的CMD规范,这两种都能达成浏览器端模块化开发的目的。
这几天我就在研究最近很火的支付宝大牛玉伯所写的SeaJS。
SeaJS为国人所写,因此中文文档看起来很爽。但不幸的是,很多著名的javascript框架和插件都不支持CMD规范,比如用得最多的jQuery和它的插件。如果想用它们进行模块化开发,就必须手动将他们封装成CMD模块。
对于jquery,一般这样封装:
封装后,jquery就成为标准CMD模块了,可以使用SeaJS的use方法或require方法直接读取:
但是,这样封装以后存在隐患。比如某个新来的php程序员不懂这些,他可能像往常一样,引入<script src="jquery.js"></script>,然后$("p")调用,结果只会发现一行报错:$ is not a function。
因为jquery文件模块化以后,全局作用域已经不存在jquery或者$了,当然会报错。
所以我们需要一种兼容非模块化引用的封装方案 :
原理看出来了吧,把一个匿名函数当做变量传入闭包,判断有无SeaJS提供的define方法。若有,则为CMD模块读取,返回$.noConflict(true);若无,则为普通的脚本引入,执行原生的jquery代码。
这样封装以后,就不怕程序员的误操作了。同理,其他的javascript文件也可以进行类似的封装。
文章来自:http://www.jackyrao.com/archives/383
目前常见的javascript模块规范有以RequireJS为代表的AMD规范和以SeaJS为代表的CMD规范,这两种都能达成浏览器端模块化开发的目的。
这几天我就在研究最近很火的支付宝大牛玉伯所写的SeaJS。
SeaJS为国人所写,因此中文文档看起来很爽。但不幸的是,很多著名的javascript框架和插件都不支持CMD规范,比如用得最多的jQuery和它的插件。如果想用它们进行模块化开发,就必须手动将他们封装成CMD模块。
对于jquery,一般这样封装:
因为jquery文件模块化以后,全局作用域已经不存在jquery或者$了,当然会报错。
所以我们需要一种兼容非模块化引用的封装方案 :
这样封装以后,就不怕程序员的误操作了。同理,其他的javascript文件也可以进行类似的封装。
文章来自:http://www.jackyrao.com/archives/383
相关文章推荐
- 非CMD模块的javascript文件兼容封装方案
- bootstrap封装成seajs cmd模块
- 支持seaJs和requireJs的前端模块开发方案(四):AMD模式和CMD模式下的config.js
- javascript之自定义js封装库兼容主流浏览器实现DOM加载之后,页面完全加载之前执行js
- HTML5+flash打造兼容各浏览器的文件上传方案
- JavaScript用匿名闭包封装模块
- javascript全局变量封装模块实现代码
- js文件封装javascript在html中获取url参数
- javaScript模块规范、AMD、CMD
- cygwin--更新源软件方案-设置代理-兼容错误等文件解决
- javascript解析xml文件。兼容IE、firefox、Chrome
- javaScript模块规范、AMD、CMD
- JavaScript文件里,兼容onload函数的新onload函数写法
- 封装实现JavaScript 文件的动态加载功能
- WINDOWS CMD 文件共享及封装软件
- 把jQuery的类、插件封装成seajs的模块的方法
- 用JavaScript封装下FileSystemObject,做下文件操作!
- GridView 72般绝技,Javascript与asp.net 实现Ajax多文件无刷新上传,在ASP.NET中执行URL重写经典方案
- flash + html5 实现浏览器兼容的文件上传方案
- js + php 读取、播放视频流 兼容firefox,chrome,ie,mac的safari,ios的safari,ios的微信浏览器(curl读取文件流篇) 分类: php javascript 浏览器兼容 safari 视频流 jwplayer6