SlideShare une entreprise Scribd logo
1  sur  22
静态项目管理工具 - opm

  Object project manager
问题
•   文件颗粒度 – 维护性
•   网络请求数 – 性能
•   互斥
•   解决方法:合并,增加编译过程
项目管理工具
•   有ant/maven等
•   处理依赖
•   构建项目
•   文档、单元测试等等
一个典型的前端项目
• https://github.com/jquery/jquery
• https://github.com/joyent/node
opm介绍
• 一个类似于ant/maven的代码构建工具,一
  个控制台程序
• 一个类似于apt-get/yum的代码(包含依赖)
  获取工具,搭配一个可自行搭建的代码中
  央库服务器
• 可通过设置静态服务器代理实现实时的动
  态编译
• 可与mercurial结合实现中央库的自动编译发
  布
• 与人人网业务无关
• 完全开源
• http://staticcompiler.googlecode.com/
一个opm项目
•   一个template-config.xml文件
•   doc目录 - 项目文档
•   lib目录 - 相关依赖库
•   res目录 - 资源文件(图片、flash)
•   test目录 - 测试
•   src目录 - 项目源代码
库
• 前端静态“库”,包括css/js/图片/swf等静态资源
• 严格区分“源库”与“发布库”
• 每个源库可选一个唯一标识,格式一个url
• 保持每个库的独立性,不通过路径进行依赖,
  通过唯一标识处理依赖
• 源库中只存在最小粒度的源文件
• 通过init命令初始化一个源库
• template-config.xml 标识一个库
库
• 一个源库可以对应多个发布库
• 一个发布库对应一个源库
• 对于源库,发布库是无形的,源库不保存
  发布库的任何信息
• 源库与发布库之间通过link命令进行连接,
  有两种连接方式,本地连接和标识连接
本地连接
• 本地连接,发布库中直接保存了源库的本
  地路径
• 优点:无需工作区支持
• 缺点:每个开发人员都需要自己通过link命
  令建立连接;无法处理依赖
• 用于:独立、临时性的小项目
标识连接
• 标识连接,发布库中保存了源库的唯一标
  识
• 优点:只需项目创建者建立一次连接;有
  工作区支持,可以处理项目依赖
• 缺点:需要工作区支持
• 处理依赖 – 工作区
工作区
• 一个包含了多个库的磁盘目录
• 一个工作区中的多个库可以通过库的唯一
  标识进行依赖,不通过磁盘路径进行依赖
• 保证一个库在一个工作区中只存在一份代
  码,实现一处编写,处处编译。
• 通过load命令加载、初始化工作区
编写template-config.xml
• 源库的配置文件
• 根 package,属性url指定其唯一标识
• source/library/resource 元素,每个元素对应
  一个目录,通过dir属性指定目录名,一般
  为src/lib/res
• 以后还会有document/test等
library的磁盘映射机制
• 通过指定依赖库的唯一标识,将依赖库的
  文件“映射”至当前库的磁盘路径上
• 映射后的路径可在配置文件combine/include
  中使用,也可以在css文件中使用
JS文件的合并 - combine
• 每个combine标识一个合并文件
• 合并文件在文件系统上的地位与最小颗粒
  度文件相同,即也可以被别的文件再次合
  并,实现多级合并
• 依赖库的文件也一视同仁
• 同样的,最小颗粒度的非合并文件也可以
  作为发布文件进行发布
• 发布库中的发布文件名与源库中相同
CSS文件的合并 - import
• IE著名的import bug,且会增加网络请求数,
  没有人使用这个特性
• 发布库支持针对不同浏览器发布不同的文
  件,添加 -ie6-min/-ie7-min/-std-min/-all-min
  等后缀(开发中)
• 因此,发布库中的发布文件名为源库文件
  名加入 -all-min 后缀,比如 core.css 对应
  core-all-min.css。
发布目录结构
• 永远不要直接修改发布目录的文件,因为
  修改了源文件后,发布文件会被覆盖
• 发布目录中存在一个.template-info目录用于
  存放源库路径、编译状态等临时文件
安装步骤
• http://code.google.com/p/staticcompiler/wiki
  /HowToSetup
• Python
• flup
• opm
• nginx
• 配置nginx
命令介绍
•   get – 从公共代码库获取源代码
•   init – 初始化一个新库
•   compile – 编译一个css/js文件
•   publish – 将整个发布库进行编译
•   link -将发布库与源库进行映射
•   load – 加载本地工作区
•   serve – 启动一个可实时编译的静态服务器
•   packages/workspace/root/source/status/libs/incs
opm serve
• 实现动态实时编译的核心
• 在本机运行一个http server,将所有对发布
  库css/js发布文件的请求监听,发现源文件
  有修改则编译后返回发布文件
The End

   weibo.com: @宇义
mail: goto100@gmail.com

Contenu connexe

Tendances

lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用hugo
 
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應Justin Lin
 
COSCUP 2010 - node.JS 於互動式網站之應用
COSCUP 2010 - node.JS 於互動式網站之應用COSCUP 2010 - node.JS 於互動式網站之應用
COSCUP 2010 - node.JS 於互動式網站之應用ericpi Bi
 
RxJS 6 新手入門
RxJS 6 新手入門RxJS 6 新手入門
RxJS 6 新手入門Will Huang
 
MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)Lixun Peng
 
kissy modularization part2
kissy modularization part2kissy modularization part2
kissy modularization part2yiming he
 
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式Justin Lin
 
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletJustin Lin
 
课题三:Nginx基础知识
课题三:Nginx基础知识课题三:Nginx基础知识
课题三:Nginx基础知识Liu Allen
 
How svn work_and_how_to_use
How svn work_and_how_to_useHow svn work_and_how_to_use
How svn work_and_how_to_useBin Feng
 
Mvcc (oracle, innodb, postgres)
Mvcc (oracle, innodb, postgres)Mvcc (oracle, innodb, postgres)
Mvcc (oracle, innodb, postgres)frogd
 
Node js实践
Node js实践Node js实践
Node js实践jay li
 
Database.Cache&Buffer&Lock
Database.Cache&Buffer&LockDatabase.Cache&Buffer&Lock
Database.Cache&Buffer&LockLixun Peng
 
移动搜索在慢网速下的优化
移动搜索在慢网速下的优化移动搜索在慢网速下的优化
移动搜索在慢网速下的优化Charlee Green
 
Servlet & JSP 教學手冊第二版 - 第 11 章:簡介 JavaMail
Servlet & JSP 教學手冊第二版 - 第 11 章:簡介 JavaMailServlet & JSP 教學手冊第二版 - 第 11 章:簡介 JavaMail
Servlet & JSP 教學手冊第二版 - 第 11 章:簡介 JavaMailJustin Lin
 
编辑器设计U editor
编辑器设计U editor编辑器设计U editor
编辑器设计U editortaobao.com
 
Java_07:Thread
Java_07:ThreadJava_07:Thread
Java_07:ThreadBrad Chao
 

Tendances (20)

lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用
 
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應
 
COSCUP 2010 - node.JS 於互動式網站之應用
COSCUP 2010 - node.JS 於互動式網站之應用COSCUP 2010 - node.JS 於互動式網站之應用
COSCUP 2010 - node.JS 於互動式網站之應用
 
RxJS 6 新手入門
RxJS 6 新手入門RxJS 6 新手入門
RxJS 6 新手入門
 
MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)
 
kissy modularization part2
kissy modularization part2kissy modularization part2
kissy modularization part2
 
Maven & mongo & sring
Maven & mongo & sringMaven & mongo & sring
Maven & mongo & sring
 
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
 
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
 
课题三:Nginx基础知识
课题三:Nginx基础知识课题三:Nginx基础知识
课题三:Nginx基础知识
 
How svn work_and_how_to_use
How svn work_and_how_to_useHow svn work_and_how_to_use
How svn work_and_how_to_use
 
Mvcc (oracle, innodb, postgres)
Mvcc (oracle, innodb, postgres)Mvcc (oracle, innodb, postgres)
Mvcc (oracle, innodb, postgres)
 
Node js实践
Node js实践Node js实践
Node js实践
 
Database.Cache&Buffer&Lock
Database.Cache&Buffer&LockDatabase.Cache&Buffer&Lock
Database.Cache&Buffer&Lock
 
移动搜索在慢网速下的优化
移动搜索在慢网速下的优化移动搜索在慢网速下的优化
移动搜索在慢网速下的优化
 
Servlet & JSP 教學手冊第二版 - 第 11 章:簡介 JavaMail
Servlet & JSP 教學手冊第二版 - 第 11 章:簡介 JavaMailServlet & JSP 教學手冊第二版 - 第 11 章:簡介 JavaMail
Servlet & JSP 教學手冊第二版 - 第 11 章:簡介 JavaMail
 
编辑器设计U editor
编辑器设计U editor编辑器设计U editor
编辑器设计U editor
 
Asp.net core v1.0
Asp.net core v1.0Asp.net core v1.0
Asp.net core v1.0
 
Node分享 展烨
Node分享 展烨Node分享 展烨
Node分享 展烨
 
Java_07:Thread
Java_07:ThreadJava_07:Thread
Java_07:Thread
 

Similaire à OPM

前端自動化工具
前端自動化工具前端自動化工具
前端自動化工具國昭 張
 
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略Will Huang
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合Qiangning Hong
 
Docker初识
Docker初识Docker初识
Docker初识hubugui
 
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7Justin Lin
 
静态项目管理工具 - opm
静态项目管理工具 - opm静态项目管理工具 - opm
静态项目管理工具 - opmgoto100
 
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
開放原始碼 Ch2.4   app - oss - db (ver 1.0)開放原始碼 Ch2.4   app - oss - db (ver 1.0)
開放原始碼 Ch2.4 app - oss - db (ver 1.0)My own sweet home!
 
OpenEJB - 另一個選擇
OpenEJB - 另一個選擇OpenEJB - 另一個選擇
OpenEJB - 另一個選擇Justin Lin
 
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩Wen-Tien Chang
 
Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2redhat9
 
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 ServletServlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 ServletJustin Lin
 
Docker一期培训
Docker一期培训Docker一期培训
Docker一期培训青帅 常
 
Cloudstack dev/user sharing
Cloudstack dev/user sharingCloudstack dev/user sharing
Cloudstack dev/user sharinggavin_lee
 
開發環境建置
開發環境建置開發環境建置
開發環境建置Shengyou Fan
 
Java类加载器
Java类加载器Java类加载器
Java类加载器Fu Cheng
 
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTLServlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTLJustin Lin
 
10. 進入瀏覽器
10. 進入瀏覽器10. 進入瀏覽器
10. 進入瀏覽器Justin Lin
 
改善 Angular 開發流程:你所不知道的 Schematics 程式碼產生器
改善 Angular 開發流程:你所不知道的 Schematics 程式碼產生器改善 Angular 開發流程:你所不知道的 Schematics 程式碼產生器
改善 Angular 開發流程:你所不知道的 Schematics 程式碼產生器Chieh Kai Yang
 
Artifacts management with CI and CD
Artifacts management with CI and CDArtifacts management with CI and CD
Artifacts management with CI and CDChen-Tien Tsai
 

Similaire à OPM (20)

前端自動化工具
前端自動化工具前端自動化工具
前端自動化工具
 
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
 
Docker初识
Docker初识Docker初识
Docker初识
 
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
 
静态项目管理工具 - opm
静态项目管理工具 - opm静态项目管理工具 - opm
静态项目管理工具 - opm
 
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
開放原始碼 Ch2.4   app - oss - db (ver 1.0)開放原始碼 Ch2.4   app - oss - db (ver 1.0)
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
 
OpenEJB - 另一個選擇
OpenEJB - 另一個選擇OpenEJB - 另一個選擇
OpenEJB - 另一個選擇
 
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
 
Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2
 
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 ServletServlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
 
Docker一期培训
Docker一期培训Docker一期培训
Docker一期培训
 
Cloudstack dev/user sharing
Cloudstack dev/user sharingCloudstack dev/user sharing
Cloudstack dev/user sharing
 
開發環境建置
開發環境建置開發環境建置
開發環境建置
 
Java类加载器
Java类加载器Java类加载器
Java类加载器
 
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTLServlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
 
Ant
AntAnt
Ant
 
10. 進入瀏覽器
10. 進入瀏覽器10. 進入瀏覽器
10. 進入瀏覽器
 
改善 Angular 開發流程:你所不知道的 Schematics 程式碼產生器
改善 Angular 開發流程:你所不知道的 Schematics 程式碼產生器改善 Angular 開發流程:你所不知道的 Schematics 程式碼產生器
改善 Angular 開發流程:你所不知道的 Schematics 程式碼產生器
 
Artifacts management with CI and CD
Artifacts management with CI and CDArtifacts management with CI and CD
Artifacts management with CI and CD
 

OPM