最近在写公司 h5 活动页的时候,由于历史原因,活动页跟公司的主站点放在同一个 repo 下,且活动页的 url 访问路径也是在主站之后,并未单独分配二级域名。现在想着将活动页面项目单独拆分出来。

现有小问题

现有项目中也有几点不好在这也说一下:

  1. nginx 配置文件修改的频率并不高,但是每次部署均需要覆盖且重启 nginx
  2. 配置均写在同一份 nginx conf 中并不易于维护

其中,第一点是由于我司运维统一使用 ansible 进行项目部署,并未将 build projupload 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/

当然这只是最基本的逻辑,对于已经归档的活动重新上线,另说。

目前,网站项目有三种构建方案:

  1. Node.js 专用构建工具(Grunt、Gulp、Brunch、Broccoli、Mimosa)
  2. npm script 命令
  3. 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 {} 了。

关于拆分活动页为独立仓库的一点思考相关推荐

  1. 关于前端职业规划的一点思考

    自己目前已经工作3年了,最近也刚换了新工作,日常也一直在考虑自己的前端职业规划到底是怎样的,目前个人视角还不是很宽广,怕误人子弟,以下这篇文章有点启发,故转发供大家借鉴(里面有部分内容做了一些小修改) ...

  2. 关于淘宝店铺运营的一点思考

    关于淘宝店铺运营的一点思考 做运营有一年的时间了,其中酸甜苦辣自在其中,下面来谈谈个人对运营的看法. 淘宝运营有两种,下面我就分开讲一下: 第一种是公司给予最大的支持,只要有合理的方案,你自己对店铺有 ...

  3. 关于社交圈子的一点思考

    虽互不曾谋面,但希望能和您成为笔尖下的朋友 以读书,技术,生活为主,偶尔撒点鸡汤 不作,不敷衍,意在真诚吐露,用心分享 点击左上方,可关注本刊 标星公众号(ID:itclanCoder) (语音时长有 ...

  4. mysql 手动写时间_关于数据库中如何存储时间的一点思考

    1.切记不要用字符串存储日期 我记得我在大学的时候就这样干过,而且现在很多对数据库不太了解的新手也会这样干,可见,这种存储日期的方式的优点还是有的,就是简单直白,容易上手. 但是,这是不正确的做法,主 ...

  5. 对于表列数据类型选择的一点思考

    对于表列数据类型选择的一点思考 简介 SQL Server每个表中各列的数据类型的选择通常显得很简单,但是对于具体数据类型的选择的不同对性能的影响还是略有差别.本篇文章对SQL Server表列数据类 ...

  6. 关于STM32驱动DS1302实时时钟的一点思考

    关于STM32驱动DS1302实时时钟的一点思考 之前用51驱动过DS1302,没用多久就输出了正确的时间.当时以为这块芯片其实没啥,很简单.但是现在用STM32做项目,用到同样的芯片,以为这有何难, ...

  7. 对高并发流量控制的一点思考

    前言 在实际项目中,曾经遭遇过线上5W+QPS的峰值,也在压测状态下经历过10W+QPS的大流量请求,本篇博客的话题主要就是自己对高并发流量控制的一点思考. 应对大流量的一些思路 首先,我们来说一下什 ...

  8. 关于c语言结构体偏移的一点思考

    注:此处只是利用了编译器的特性来计算结构体偏移 这句话就一笔带过,说得有点牵强附会.以后有时间自己再详细了解一下编译器的特性... more exceptional c++ 中文版 26页 https ...

  9. App用户体验的一点思考

    App用户体验的一点思考 最近我在团队中负责TImers4Me这款Android软件的开发.维护和更新,软件每次在市场上的发布都能得到用户一些有价值的反馈,通过收集整理用户们的使用反馈,我们常能看到一 ...

最新文章

  1. Linux17-磁盘分区、文件系统、逻辑卷管理LVM
  2. 程序员面试题精选100题(50)-树的子结构[数据结构]
  3. 离职交接文档_关于工作交接
  4. web.xml 文件中的配置节的加载顺序
  5. Topcoder SRM 648 (div.2)
  6. [高效时间管理] 番茄工作钟 windows版本
  7. HSRP的初步解析及典型应用2
  8. 深入了解EntityFramework——数据注解属性
  9. javacript 多文件程序
  10. vmware-vmx.exe无法结束进程_孤儿进程与僵尸进程产生原理分析,以及终极解决方案案例实现...
  11. mysql 触发器 new.id_mysql 触发器 new.id
  12. 封装自己专属的真正的纯净版Windows系统过程记录(4)——进行封装
  13. quartus仿真34:74161构成长度为10的序列发生器
  14. spring-task
  15. 安卓中的inflate方法
  16. Latex参考文献引用顺序排序
  17. 团队协作工具--worktile
  18. 使用python操作qq邮箱发送邮件
  19. Pandas 数据分析-第八章(排序sort_index())
  20. 2021高考成绩省内排名查询,云南高考排名查询方法 2021年云南高考成绩位次全省排名查询...

热门文章

  1. 七个最流行的Python神经网络库
  2. 马斯克:十年内可把人脑与AI计算机连接起来
  3. 李彦宏:汽车工业面临无人驾驶百年变局
  4. 神经网络-常用激活函数
  5. 【机器学习】24个终极项目提升您的机器学习知识和技能
  6. SAP MM 如何查询物料凭证号是由哪个IDoc Post后产生的?
  7. SAP MM 采购报表中Delivery Date的显示
  8. SAP MM PO中的Delivery Date并非保存在EKPO表里
  9. linux中查看文件内容常用的命令
  10. np.asarray和np.array、np.nanmean和np.mean、np.diff、