JavaScript模块化解决方案Sea.js(上)
来源:互联网 发布:宝塔 递推 算法 编辑:程序博客网 时间:2024/05/19 13:17
1.模块化开发的背景
当你开发的网站越来越大时候,越来越复杂的时候会经常遇到下面的问题:冲突和依赖
moduleOne.js
function dialog(){}//对话框function drag(){}//拖拽function panel(){}//面板
<!-- 同事一自定义的库 --><script type="text/javascript" src="moduleOne.js"></script><!-- 同事二自定义的库 --><script type="text/javascript"> /* 第一个问题:冲突 这个里面的方法有可能和同事一库中的方法重名,进行覆盖 */ function panel(){} /* 怎样解决这个问题呢?可以在同事一的库中添加模块名称类似于 moduleOne.panel = function(){} 同事二可以这样自定义自己的方法 */ moduleTwo.panel = function(){} /* 虽然上述的冲突解决了,但是如果同事多了,项目大了更复杂了 模块的命名增加多了,可能是很多层模块如下所示: moduleOne.xxx.yyy.zzz = function(){} 还有如果有规范还行,如果没有规范这个问题完全无法想象? 第二个问题:依赖问题 这个问题简直是太让人崩溃了,亲身体验过才知道....呜呜... 项目我们会约定一些添加约束的规则,但是这些规则有的时候 还不是很健全。下面是我的组件的顺序下面的模块会依赖上面的 模块,但是加入某天需要在panel里面添加一个新功能,发现 下面的模块依赖出问题了,你需要去各个页面里面去修改依赖 文件的顺序,很无语啊...... */</script><script src="dialog.js"></script><script src="panel.js"></script><script src="drag.js"></script>
通过上面的代码我们就可以发现业务复杂了,代码多了,就需要模块化的框架来管理我们的代码。Sea.js是一个非常好的解决方案。
moduleTwo.js
var needStr = 'Sea js need load this module!!!';
moduleOne.js
/** Sea.js中define方法中的三个参数是不允许修改的 这个请注意 require:模块加载函数,用于加载依赖模块 exports:对外接口,将模块内的数据向外提供访问的入口 module:模块的元函数*/define(function(require,exports,module){ /* 假如现在moduleOne需要依赖moduleTwo模块,如何加载呢? 可以使用require方法进行加载moduleTwo模块,其中require 方法加载模块后返回的就是exports向外界暴露的接口 */ var exInterface = require('./moduleTwo.js'); //自定义函数 function panel(){ alert('This is a Panel!!!'); //需要访问moduleTwo中的数据,两者之间产生依赖关系 alert(needStr); } //将方法向外提供接口,以供外部访问 exports.panel = panel ;});
<!-- 导入Sea.js的类库--><script src="script/sea.js"></script><script type="text/javascript"> /* 在模块中用define方法定义了函数,如何在外部使用呢? 其中use方法中的回调函数中的ex参数表示define方法中 向外提供的访问接口 */ seajs.use('./script/moduleOne.js',function(ex){ alert("Callback Runnning!!!"); ex.panel(); }); function panel(){ alert("Define Panel!"); } panel();</script>
上面讲了模块化开发的背景和常见的两种问题种类,抛出了问题。然后用Sea.js解决这个简单的模块化问题。后面还会降到如何用Sea.js结合Grunt JS构建工具,构建现实中线下开发和线上开发的过程。
1 0
- JavaScript模块化解决方案Sea.js(上)
- JavaScript模块化解决方案Sea.js+Grunt(中)
- javascript模块化加载sea.js
- JavaScript模块化编程补充Sea.js
- js模块化开发----sea.js
- js模块化之sea.js
- Javascript模块化编程--require.js(上)
- Extjs3+sea.js 实现模块化
- sea.js的模块化开发
- javaScript 模块化开发 AMD(异步加载 require.js) 和CMD( sea.js) 1
- sea.js的模块化开发起步
- sea.js+jQuery+jQueryMobile的模块化开发
- 如何通过sea.js进行模块化开发
- 前端模块化开发 CMD规范 sea.js
- REQUIRE.JS和SEA.JS模块化加载JS
- Javascript模块化编程(一):JS模块化的演变过程
- 转:javascript模块化编程(require.js)
- Javascript模块化编程--require.js(下)
- tcpdump 使用
- MVC 数据库连接
- 字符串的大小写转换方法
- 静态工厂方法与构造器
- 03-树1. 二分法求多项式单根
- JavaScript模块化解决方案Sea.js(上)
- datetimepicker 基于jQuery的日期时间插件
- 25-语言入门-25-n-1位数
- phpcms v9表单向导中怎么加入验证码
- 26-语言入门-26-兄弟郊游问题
- HDU 3652 B-number(数位DP)
- NDK使用指南(一)
- java环境搭建
- 辛星整理Linux中常用的查询命令