Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Seajs模块化开发思路
Search
cssrain
July 14, 2014
Technology
150
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Seajs模块化开发思路
cssrain
July 14, 2014
More Decks by cssrain
See All by cssrain
UED工作流程分享和交流
cssrain
1
480
解读HTML
cssrain
0
150
解读HTML5
cssrain
2
180
基础CSS(1)
cssrain
0
160
基础CSS(2)
cssrain
0
120
高效的CSS
cssrain
0
160
高级CSS—继承
cssrain
0
140
PhoneGap分享和交流
cssrain
0
110
PhoneGap实践
cssrain
0
87
Other Decks in Technology
See All in Technology
Platform engineering for developers, architects & the rest of us (AI agents)
danielbryantuk
0
180
AIを「創る」と「使う」の循環 — HRテックが実践するリアルなAI組織実装
taketo957
0
1.6k
Oracle Cloud Infrastructure IaaS 新機能アップデート 2026/3 - 2026/5
oracle4engineer
PRO
1
200
Djangoユーザが知っ得なPostgreSQL機能 - 設計の選択肢を増やす / Djang-use-PostgreSQL
soudai
PRO
0
200
Claude Code×Terraform IaC テンプレート駆動開発
itouhi
1
370
Diagnosing performance problems without the guesswork
elenatanasoiu
0
170
Ruby::Boxでできること、Refinementsでできること
joker1007
3
390
TypeScript Compiler APIとPHP-Parserを活用し、TypeScriptとPHPで型を共有する
shuta13
0
360
新規事業を牽引する技術選定 〜フルスタックTypeScript開発の実践事例〜
nullnull
3
350
protovalidate-es を導入してみた
bengo4com
0
120
AI駆動開発が変える、大規模開発の前提 ーHuman in the Loop から Human on the Loop へ / AIE2026
visional_engineering_and_design
18
9.5k
LLMを「主役」にしないための 3つの原則
techtekt
PRO
0
120
Featured
See All Featured
Paper Plane (Part 1)
katiecoart
PRO
0
8.5k
KATA
mclloyd
PRO
35
15k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
160
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
310
How to build a perfect <img>
jonoalderson
1
5.6k
WENDY [Excerpt]
tessaabrams
11
38k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
350
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
270
Building Applications with DynamoDB
mza
96
7.1k
Paper Plane
katiecoart
PRO
1
51k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Heart Work Chapter 1 - Part 1
lfama
PRO
7
36k
Transcript
前端模块化开发 CMCCRMSRD-HZNewBusiness Dept . 2014.04.04 齐继超 —Seajs 模块化实践
传统的开发模式 根据页面功能来划分不同的业务区域 开发人员分别编写CSS,HTML,JS实现业务功能 最后将所有的业务组织起来,完善整个系统 功能编码 业务划分 整合调试
传统开发模式常见的问题 命名冲突 代码冗余 不易维护 无法协作 编码容易,维护不易,且行且珍惜
代码和我冲突了 这段代码可以复用吗 天啊,代码有一千多行
尝试解决的方案——组件化 定制编码规范 基础 UI 组件 丰富 JS
组件 精选第三方组件 CSS规范 编码规范 JS规范 UI 库 Reset Layout Form Table Msg JS 组件 Tabs Scrollup Modal Collspse Tooltip HTML规范 工程师规范 artDialog 精选第三方 Handlebars omGrid 关注命名规则 快速搭建页面 常用组件复用 稳定高效
尝试解决的方案——组件化 组件使用方便 接口清晰易扩展 代码稳定质量高 我也要写组件
尝试解决的方案——组件库 JavaScript 规范 var org = {}; var org.Utils
= {}; var org.Utils.tabs=function(arr){ // 实现代码 } JavaScript .ui-tabs { border:1px solid #ccc } .ui-tabs-light { border:1px solid #d9d9d9 } .ui-tabs-title { border-bottom:1px solid #ccc; } .ui-tabs-title h3 { border-bottom:1px solid #eee; } CSS CSS 规范
尝试解决的方案——组件库 组件库的页面开发模式 <!doctype html> <head> <title>余额宝查询</title> <link rel="stylesheet" href="lib/imui.all.css"
/> <script src="lib/tabs.js"></script> <script src="lib/handlebars.js"></script> <script type="text/javascript" src="function1.js" ></script> <div id ="assetQuery"></div> </head> <script> // 业务功能代码 iModule.init({obj:"#assetQuery"}); </script> </html> page.html 业务逻辑代码 基础UI库 常用组件库 规范代码 第三方模板库
组件化开发的新问题 依赖文件需要预先按顺序加载 <head> <script src="lib/core.js"></script> <script src="lib/layer.js"></script> <script src="lib/drag.js"></script>
<script src="lib/dialog.js"></script> <script type="text/javascript" src="function1.js" ></script> <script type="text/javascript" src="function2.js" ></script> <script type="text/javascript" src="function3.js" ></script> <script type="text/javascript" src="function4.js" ></script> </head> 引入的所有组件 相互依赖的业务代码
组件化开发的新问题 组件书写格式和基本交互规则不一致 var org = {}; var org.Utils =
{}; var org.Utils.tabs=function(arr){ // 实现代码 } JavaScript (function($){ $.fn.Tabs = function(options){ // 实现代码 }; })(jQuery); jQuery
尝试解决的方案 —— 模块化 将一段JavaScript代码,进行统一的格式书写 通过基本的交互规则,模块之间能彼此引用,协同工作。 通过模块加载器进行异步加载依赖模块
通用模块定义 - CMD define(function(require, exports, module) { // 获取模块 a
的接口 var a = require('a'); // 调用模块 a 的方法 a.doSomething(); // 对外提供 doSomething 方法 exports.doSomething = function() {}; }); CM D
异步模块定义 - AMD define(['a','b'],function(a) { // 模块依赖在定义的时候就写好 a.doSomething(); b.doSomething(); //
对外提供 doSomething 方法 exports.doSomething = function() {}; }); AMD
两者的区别 AMD CMD 典型的实现工具是 RequireJS 提供的API多而复杂,不容易上手 实现工具是 SeaJS
专注于WEB浏览器端 提供的API简单纯粹,容易上手 目前活跃于各大互联网公司
Seajs 简单实践
定义一个 util 工具模块 ,并且向外提供调用接口 define(function(require,exports,module){ var util = {};
var colorRange = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']; util.randomColor = function(){ return '#' + colorRange[Math.floor(Math.random() * 16)] + colorRange[Math.floor(Math.random() * 16)] + colorRange[Math.floor(Math.random() * 16)] + colorRange[Math.floor(Math.random() * 16)] + colorRange[Math.floor(Math.random() * 16)] + colorRange[Math.floor(Math.random() * 16)]; }; module.exports = util; }); util.js #1EBE2E 提供给外部调用
定义一个app 应用模块,引入util模块的接口 define(function(require,exports,module){ // 引入util模块的接口 var util = require('util');
var helloSeaJS = document.getElementById('hello-seajs'); // 调用接口的方法 helloSeaJS.style.color = util.randomColor(); }); app.js 依赖模块 #1EBE2E
引入代码,在页面上执行模块 <!doctype html> <head> <title>Hello Seajs</title> <script src="scripts/sea.js"></script> <script>
//执行模块 seajs.use("module/app.js"); </script> </head> <body> <div id="hello-seajs" >Hello SeaJS</div> </body> </html> app.html 干净,完美
网页效果演示
浏览器请求 根据模块依赖声明,seajs已经做了自劢异步加载
感谢聆听