sea.js的模块化开发
2024-08-29 21:05:05
为什么使用sea.js?
Sea.js 追求简单、自然的代码书写和组织方式,具有以下核心特性:
- 简单友好的模块定义规范:Sea.js 遵循 CMD 规范,可以像Node.js 一般书写模块代码。
- 自然直观的代码组织方式:依赖的自动加载、配置的简洁清晰,可以让我们更多地享受编码的乐趣。
Sea.js 还提供常用插件,非常有助于开发调试和性能优化,并具有丰富的可扩展接口。
兼容性
Sea.js 具备完善的测试用例,兼容所有主流浏览器:
- Chrome 3+ ✔
- Firefox 2+ ✔
- Safari 3.2+ ✔
- Opera 10+ ✔
- IE 5.5+ ✔
Sea.js 可运行在 Mobile 端,包括 Hybrid 模式的 App 上。理论上,Sea.js 可以运行在任何浏览器引擎上。
下面我用一个简单示例来开启sea.js的模块化开发之旅:
目录结构:
hello.html文档代码:
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>测试sea.js的API</title>
- <style>
- #container{
- width:200px;
- height: 200px;
- margin: 0 auto;
- border: 1px solid #669991;
- }
- .init{
- background-color: #ff6600;
- }
- </style>
- </head>
- <body>
- <div id="container"></div>
- <script src="../sea-modules/seajs/2.2.0/sea.js"></script>
- <script>
- // seajs 的简单配置
- seajs.config({
- // Sea.js 的基础路径
- base:"../sea-modules/",
- // 设置别名,方便调用
- alias:{
- "jquery":"jquery/jquery/1.10.1/jquery.js"
- }
- });
- //for 开发阶段
- if(location.href.indexOf("?dev")>0){
- //加载一个main.js模块
- seajs.use("../static/hello/src/main");
- }
- //for上线阶段
- else{
- //加载一个main.js模块
- seajs.use("examples/hello/1.0.0/main");
- }
- </script>
- </body>
- </html>
main.js的代码:
- //定义一个模块
- define(function(require){
- //获取start.js的接口
- var Start=require('./start');
- //生成Start的实例
- var s=new Start('#container');
- //调用Start的方法
- s.render();
- });
start.js的代码:
- define(function(require,exports,module){
- //获取jQuery的接口
- var $=require('jquery');
- //定义名为Start的构造函数对象
- function Start(container){
- this.container=$(container);
- }
- //对外提供接口
- module.exports=Start;
- //定义Start对象的原型方法
- Start.prototype.render=function(){
- this._init();
- this.container.css('border','5px solid #f00');
- };
- Start.prototype._init=function(){
- this.container.addClass('init');
- return this;
- }
- });
示例效果如下:
最新文章
- C# 条形码操作【源码下载】
- [Centos 6]升级安装GCC(2)
- MVVM开发模式简单实例MVVM Demo
- lua 自己编译源文件
- 【BZOJ-2502】清理雪道 有上下界的网络流(有下界的最小流)
- ECSHOP去版权标志删除Powered by ECShop(转)
- Bootstrap 3 How-To #3 布局
- wuzhicms 查看模板中的所有可用变量和值
- FPGA DDR3调试
- Android安全专项-利用androguard分析微信
- Office Add-in 设计规范与最佳实践
- egg.js 的优缺点
- Python入门(青铜篇)
- uwp 动画Storyboard
- ZKWeb网页框架2.1正式发布
- luogu 1850 换教室 概率+dp
- 转载------------C函数之memcpy()函数用法
- root权限使用vim不能修改权限
- XtraEditors一、总体介绍
- C/C++预处理指令
热门文章
- java中的向下转型
- Hbase- Hbase客户端读写数据时的路由流程
- ios 获取导航栏和状态栏高度,针对iPhoneX
- 大数据框架对比:Hadoop、Storm、Samza、Spark和Flink——flink支持SQL,待看
- java学习笔记 --- 多线程(线程安全问题——同步代码块)
- Incorrect string value: &#39;\xE7\x8E\x8B\xE4\xBD\xB3&#39; for column &#39;contact&#39; at row 1
- 2018.7.30 Designing a Qi-compliant receiver coil for wireless power systems
- 2017.12.15 python资料,转存一下。
- BZOJ - 3123 森林 (可持久化线段树+启发式合并)
- UVA - 11212 Editing a Book (IDA*)