关于拆分活动页为独立仓库的一点思考
最近在写公司 h5
活动页的时候,由于历史原因,活动页跟公司的主站点放在同一个 repo
下,且活动页的 url
访问路径也是在主站之后,并未单独分配二级域名。现在想着将活动页面项目单独拆分出来。
现有小问题
现有项目中也有几点不好在这也说一下:
nginx
配置文件修改的频率并不高,但是每次部署均需要覆盖且重启nginx
- 配置均写在同一份
nginx conf
中并不易于维护
其中,第一点是由于我司运维统一使用 ansible 进行项目部署,并未将 build proj
和 upload nginx
分为两个 task
,在这里可以进行一些优化,解决方法就是拆分 task
,分为多个 npm script
执行,例如:
{"deploy": "yarn run build:production && cd deploy && ansible-playbook -i inventory/xxx.com/ web.yml -t'run:web'","deploy:nginx": "cd deploy && ansible-playbook -i inventory/xxx.com/ web.yml -t'run:nginx'",
}
这样就可以解决多人合作中,如果有人提交 staging
环境测试,nginx
配置也会被同时更新的问题。
拆分独立仓库的思考
对于 h5
和主站点的杂糅问题,目前我在做的是将 h5
拆分出来,单独维护主站点和 h5
站点,给 h5
站点单独配置二级域名且单独写一套生成发布系统,类似脚手架却不是脚手架,项目结构如下:
.
├── Makefile # 工程编译规则
├── README.md # 说明文档
├── bin # 脚本命令
├── deploy # 发布脚本
├── doc # 说明文档
├── events # h5 站点
│ ├── active # 正在运行
│ ├── archive # 归档下线
│ └── workspace # 开发中
├── lib # 脚本函数
├── package.json
├── template # h5 项目模板
└── utils # 通用函数
在最初我的设想其实并不是这样,而是考虑到 h5
的时效性,想做完用完即扔(果然太年轻)。这样的做法最大的弊端就是无法多人合作和进行 code review
。对于特别简单的页面可以勉强完成,但是稍微复杂的需要质量的 h5
页面,就需要我们去进行严格的 code review
了。
将之前的想法放弃之后,想到将每个活动页都作为一个仓库提交 github
并不现实,所以就想到了这个文件夹即状态的方法,将活动页面分为三类:开发中、归档(已下线)、活跃(线上)。如此一来,我们可以用脚本来统一管理,让我们来走一遍流程:
# 创建一个新的 event(也就是活动页)
make create# 归档 event
make archive # from active/ -> archive/# 部署上线 event
make active # from workspace/ -> active/
当然这只是最基本的逻辑,对于已经归档的活动重新上线,另说。
目前,网站项目有三种构建方案:
- Node.js 专用构建工具(Grunt、Gulp、Brunch、Broccoli、Mimosa)
- npm script 命令
- Makefile
第一种方案插件语法太过繁杂,不如方案二和三简便,且存在版本问题。方案二则可以看作方案三的变种,根据喜好选择即可。
我选择 Makefile
的原因也很简单,就是作为唯一入口。通过构建命令来调用我写好的脚本命令:
.PHONY: help
help:@echo "Usage: make <command>"@echo "The commands are:"@echo " install Install npm dependences"@echo " create Create an event"@echo " archive Archive events"@echo " lint-dev Lint zeus source code"# ....PHONY: all
all: help.PHONY: install
install:@npm install &>/dev/null.PHONY: create
create: install@node ./bin/create.js.PHONY: create
archive: install@node ./bin/archive.js.PHONY: lint
lint-dev: install@./node_modules/.bin/eslint . --fix# ...
可以说很是直观,也并不会存在忘掉 npm i
等令人窒息的操作了。
部署
可以使用 nginx
通配符来匹配目标活动页路径,再也不用手动多次添加 location xxx {}
了。
关于拆分活动页为独立仓库的一点思考相关推荐
- 关于前端职业规划的一点思考
自己目前已经工作3年了,最近也刚换了新工作,日常也一直在考虑自己的前端职业规划到底是怎样的,目前个人视角还不是很宽广,怕误人子弟,以下这篇文章有点启发,故转发供大家借鉴(里面有部分内容做了一些小修改) ...
- 关于淘宝店铺运营的一点思考
关于淘宝店铺运营的一点思考 做运营有一年的时间了,其中酸甜苦辣自在其中,下面来谈谈个人对运营的看法. 淘宝运营有两种,下面我就分开讲一下: 第一种是公司给予最大的支持,只要有合理的方案,你自己对店铺有 ...
- 关于社交圈子的一点思考
虽互不曾谋面,但希望能和您成为笔尖下的朋友 以读书,技术,生活为主,偶尔撒点鸡汤 不作,不敷衍,意在真诚吐露,用心分享 点击左上方,可关注本刊 标星公众号(ID:itclanCoder) (语音时长有 ...
- mysql 手动写时间_关于数据库中如何存储时间的一点思考
1.切记不要用字符串存储日期 我记得我在大学的时候就这样干过,而且现在很多对数据库不太了解的新手也会这样干,可见,这种存储日期的方式的优点还是有的,就是简单直白,容易上手. 但是,这是不正确的做法,主 ...
- 对于表列数据类型选择的一点思考
对于表列数据类型选择的一点思考 简介 SQL Server每个表中各列的数据类型的选择通常显得很简单,但是对于具体数据类型的选择的不同对性能的影响还是略有差别.本篇文章对SQL Server表列数据类 ...
- 关于STM32驱动DS1302实时时钟的一点思考
关于STM32驱动DS1302实时时钟的一点思考 之前用51驱动过DS1302,没用多久就输出了正确的时间.当时以为这块芯片其实没啥,很简单.但是现在用STM32做项目,用到同样的芯片,以为这有何难, ...
- 对高并发流量控制的一点思考
前言 在实际项目中,曾经遭遇过线上5W+QPS的峰值,也在压测状态下经历过10W+QPS的大流量请求,本篇博客的话题主要就是自己对高并发流量控制的一点思考. 应对大流量的一些思路 首先,我们来说一下什 ...
- 关于c语言结构体偏移的一点思考
注:此处只是利用了编译器的特性来计算结构体偏移 这句话就一笔带过,说得有点牵强附会.以后有时间自己再详细了解一下编译器的特性... more exceptional c++ 中文版 26页 https ...
- App用户体验的一点思考
App用户体验的一点思考 最近我在团队中负责TImers4Me这款Android软件的开发.维护和更新,软件每次在市场上的发布都能得到用户一些有价值的反馈,通过收集整理用户们的使用反馈,我们常能看到一 ...
最新文章
- Linux17-磁盘分区、文件系统、逻辑卷管理LVM
- 程序员面试题精选100题(50)-树的子结构[数据结构]
- 离职交接文档_关于工作交接
- web.xml 文件中的配置节的加载顺序
- Topcoder SRM 648 (div.2)
- [高效时间管理] 番茄工作钟 windows版本
- HSRP的初步解析及典型应用2
- 深入了解EntityFramework——数据注解属性
- javacript 多文件程序
- vmware-vmx.exe无法结束进程_孤儿进程与僵尸进程产生原理分析,以及终极解决方案案例实现...
- mysql 触发器 new.id_mysql 触发器 new.id
- 封装自己专属的真正的纯净版Windows系统过程记录(4)——进行封装
- quartus仿真34:74161构成长度为10的序列发生器
- spring-task
- 安卓中的inflate方法
- Latex参考文献引用顺序排序
- 团队协作工具--worktile
- 使用python操作qq邮箱发送邮件
- Pandas 数据分析-第八章(排序sort_index())
- 2021高考成绩省内排名查询,云南高考排名查询方法 2021年云南高考成绩位次全省排名查询...