由于移动互联网的爆发以及响应式页面的尴尬症,开发web和mobile项目成为了标配,当然实际情况下,会有更多的项目。
多项目开发对于前端来说是个很大的挑战
- 重复,重复的前端架构,重复的前端依赖,重复的工具函数等
- 局限,不同后台有不同的规则,“因地制宜”真难受,刚伺候好
rails
又突然来个php
- 最优,后台工程做前端构建,总是显得不够“最优”。
所以,我们需要单独抽离出前端开发项目,按照前端的方式来组织代码,通过构建工具来对前端资源文件做最优处理
那么新问题来了,如何管理这个快速迭代,频繁更新的前端项目呢?
- 作为单独的项目管理?
- 用git submodule or git subtree管理?
多个后台项目:qdaily4_web/moible/app
前端项目:qdaily4_feboierplate
之前的开发模式
- 在
qdaily4_feboierplate
项目中修改前端代码 - 构建
qdaily4_feboierplate
项目,输出到qdaily4_web/mobile/app
- 提交
qdaily4_feboierplate
项目的改动 - 在
qdaily4_web/mobile/app
项目中修改后台代码 - 提交
qdaily4_web/mobile/app
项目的改动,其中包括qdaily4_feboierplate
项目构建输出的文件
这种开发模式解耦了前端项目和后台项目,前端项目严格按照前端的代码结构去组织代码,能够实现模块化,按需加载,就近原则,图片压缩等功能。缺陷在于需要频繁的切换项目提交代码。
为了解决频繁切换项目的问题,调研了git submodule和git subtree之后,选择用git subtree来解决这个问题。
现在的开发模式
qdaily4_feboierplate
作为qdaily4_web/mobile/app
的子项目,别名appfe
- 在
appfe
项目中修改前端代码 - 构建
appfe
项目,输出到qdaily4_web/mobile/app
- 提交
qdaily4_web/mobile/app
项目的改动(也会记录appfe项目的改动) - 使用git subtree命令提交
appfe
的改动到qdaily4_feboierplate
引入git subtree之后,不再感觉是在开发两个项目,不需要频繁的切换项目提交代码,只需要使用git subtree命令就可以实现qdaily4_feboierplate
项目的双向更新,快速开发。缺陷在于存在多个qdaily4_feboierplate
项目的拷贝。
双向更新
前端项目qdaily4_feboierplate
是作为子git被包含到多个后台项目中,我们通过git subtree pull & git subtree push
实现qdaily4_feboierplate
的双向更新,对于不稳定且需要快速迭代的模块代码恰到好处。
利用git subtree来管理前端模块项目和多个后台环境项目,可以有效快捷的实现前端模块项目快速开发,双向更新,配合上前端构建系统,简直爽翻了。
小技巧
git仓库取别名
使用appfe
作为git@bitbucket.org:qdaily/qdaily4_feboierplate
仓库的别名
- 直接命令行输入:
git remote add appfe git@bitbucket.org:qdaily/qdaily4_feboierplate.git
- 也可以通过配置
.git/config
文件:[remote "appfe"] url = git@bitbucket.org:qdaily/qdaily4_feboierplate fetch = +refs/heads/*:refs/remotes/appfe/*
git指令自定义
我们可以通过自定义来让git指令更简单更好记
- 配置
.git/config
让git subtree的命令更简单git subtree add --prefix=appfe git@bitbucket.org:qdaily/qdaily4_feboierplate.git master git subtree pull --prefix=appfe git@bitbucket.org:qdaily/qdaily4_feboierplate.git master git subtree push --prefix=appfe git@bitbucket.org:qdaily/qdaily4_feboierplate.git master
[alias] stadd = subtree add --prefix=appfe git@bitbucket.org:qdaily/qdaily4_feboierplate.git master stpull = subtree pull --prefix=appfe git@bitbucket.org:qdaily/qdaily4_feboierplate.git master stpush = subtree push --prefix=appfe git@bitbucket.org:qdaily/qdaily4_feboierplate.git master