当前端基建任务落到你身上,该如何推动协作?

前言

作为一名野生的前端开发,自打本猿入行起,就未经过什么系统的学习,待过的团队也是大大小小没个准儿:

  • 要么大牛带队,但是后端大牛。
  • 要么临时凑的团队,受制于从前,前端不自由。
  • 要么从 0 到项目部署,都是为了敏捷而敏捷,颇不规范。

话虽如此,经过 4 年生涯摧残的废猿我,也是有自己的一番心得体会的。

1. 从DevOps流程看前端基建

在这里插入图片描述

很多专注于切图的萌新前端看到这张图是蒙圈的:

DevOps 是什么?这些工具都是啥?我在哪?

很多前端在接触到什么前端工程化,什么持续构建/集成相关知识时就犯怂。也有觉得这与业务开发无关,不必理会。

但是往长远想,切图是不可能一辈子切图的,你业务再怎么厉害,前端代码再如何牛,没有了后端运维测试大佬们相助,一个完整的软件生产周期就没法走完。

而成为一名全栈很难,更别说全链路开发者了。

言归正传,当你进入一个新团队,前端从 0 开始,怎样从 DevOps 的角度去提高团队效能呢?
在这里插入图片描述
一套简易的 DevOps 流程包含了协作、构建、测试、部署、运行。

而前端常说的开发规范、代码管理、测试、构建部署以及工程化其实都是在这一整个体系中。

当然,中小团队想玩好 DevOps 整套流程,需要的时间与研发成本,不比开发项目少。

DevOps 核心思想就是:“快速交付价值,灵活响应变化”。其基本原则如下:

  • 高效的协作和沟通;
  • 自动化流程和工具;
  • 快速敏捷的开发;
  • 持续交付和部署;
  • 不断学习和创新。

接下来我将从协作构建测试部署运行五个方面谈谈,如何快速打造用于中小团队的前端基建。

2. 在团队内/外促进协作

前端基建协作方面可以写的东西太多了,暂且粗略分为:团队内 与 团队外。
在这里插入图片描述
以下可能是前端们都能遇到的问题:

  • 成员间水平各异,编写代码的风格各不相同,项目间难以统一管理。
  • 不同项目 Webpack 配置差异过大,基础工具函数库和请求封装不一样。
  • 项目结构与技术栈上下横跳,明明是同一 UI 风格,基础组件没法复用,全靠复制粘贴。
  • 代码没注释,项目没文档,新人难以接手,旧项目无法维护。
1. 三层代码规范约束
  • 第一层,ESLint
    常见的 ESLint 风格有:airbnbgooglestandard

在多个项目间,规则不应左右横跳,如果项目周期紧张,可以适当放宽规则,让 warning 类弱警告可以通过。且一般建议成员的IDE和插件要统一,将客观因素影响降到最低。
在这里插入图片描述

  • 第二层,Git Hooks
    git 自身包含许多 hooks,在 commitpushgit 事件前后触发执行。

husky能够防止不规范代码被commitpushmerge等等。

代码提交不规范,全组部署两行泪。

 npm install husky pre-commit  --save-dev

拿我以前的项目为例子:


// package.json
  "scripts": {
    // ...
    "lint": "node_modules/.bin/eslint '**/*.{js,jsx}' && node_modules/.bin/stylelint '**/*.{css,scss}'",
    "lint:fix": "node_modules/.bin/eslint '**/*.{js,jsx}' --fix && node_modules/.bin/stylelint '**/*.{css,scss}' --fix"
  },
  "husky": {
    "hooks": {
      "pre-commit": "npm run lint",
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
    }
  },

通过简单的安装配置,无论你通过命令行还是 Sourcetree 提交代码,都需要通过严格的校验。
在这里插入图片描述
建议在根目录 README.md 注明提交规范:

## Git 规范

使用 [commitlint](https://github.com/conventional-changelog/commitlint) 工具,常用有以下几种类型:

- feat :新功能
- fix :修复 bug
- chore :对构建或者辅助工具的更改
- refactor :既不是修复 bug 也不是添加新功能的代码更改
- style :不影响代码含义的更改 (例如空格、格式化、少了分号)
- docs :只是文档的更改
- perf :提高性能的代码更改
- revert :撤回提交
- test :添加或修正测试

举例
git commit -m 'feat: add list'
  • 第三层,CI(持续集成)。

《前端代码规范最佳实践》

前两步的校验可以手动跳过(找骂),但CI中的校验是绝对绕不过的,因为它在服务端校验。使用 gitlab CI 做持续集成,配置文件 .gitlab-ci.yaml 如下所示:

lint:
  stage:lint
  only:
    -/^feature\/.*$/
  script:
    -npmlint

这层校验,一般在稍大点的企业中,会由运维部的配置组完成。

在这里插入图片描述

2. 统一前端物料

公共组件、公共 UI、工具函数库、第三方 sdk 等该如何规范?

如何快速封装部门 UI 组件库?
首先,得感谢各大 UI 组件库的维护者们,给我们省了非常多的开发成本。

遥想 Jquery 时代,到处找插件的日子…

但是每个新团队都有自己的 UI 风格取向,你单引一个 ElementUI,肯定会出现业务水土不服以及观感不同的地方,而如果你在每个项目都强行魔改,到处污染样式,这得多心累啊。

虽然各大组件库都有提供初始化变量的方式,但业务向的组件就没办法了。

解决方案之一,就是国外很火的一个开源库:StoryBook:

在这里插入图片描述
Storybook 是一个开源工具,用于独立开发ReactVueAngular的UI组件。它能有组织和高效地构建 UI 组件。

Storybook提供了一个沙箱,用于隔离地构建 UI 组件。

类似于组件库的官方文档,却更加强大。可以通过控件和对出入参数调整,快速查看组件的用法,测试也可以对组件功能完整性等做校验。

一般的建议步骤是:

  1. 将业务从公共组件中抽离出来。
  2. 在项目中安装StoryBook(多项目时另起)
  3. 按官方文档标准,创建stories,并设定参数(同时也建议先写Jest测试脚本),写上必要的注释。
  4. 为不同组件配置StoryBook控件,最后部署。

如何统一部门所用的工具函数库和第三方sdk

其实这里更多的是沟通的问题,首先需要明确的几点:

  • 部门内对约定俗成的工具库要有提前沟通,不能这头装一个MomentJs,另一头又装了DayJS。一般的原则是:轻量的自己写,超过可接受大小的找替代,譬如:DayJS替代MomentJsImmerJS替代immutableJS等。
  • 部门间的有登录机制,请求库封装协议等。如果是SSO/扫码登录等,就协定只用一套,不允许后端随意变动。如果是请求库封装,就必须要后端统一Restful风格,相信我,不用Restful规范的团队都是灾难。前端连调会生不如死。
  • Mock 方式、路由管理以及样式写法也应当统一。
3. 在团队外促进协作

核心原则就是:“能用文档解决的就尽量别 BB。”

虽说现今前端的地位愈发重要,但我们经常在项目开发中遇到以下问题:

  • 不同的后端接口规范不一样,前端需要耗费大量时间去做数据清洗兼容。
  • 前端静态页开发完了,后端迟迟不给接口,因为没有接口文档,天天都得问。
  • 测试反馈的问题,在原型上没有体现。

首先是原型方面:

  1. 一定要看明白产品给的原型文档!!!多问多沟通,这太重要了。
  2. 好的产品一般都会提供项目流程详图,但前端还是需要基于实际,做一张页面流程图。
  3. 要产品提供具体字段类型相关定义,不然得和后端扯皮。。。

其次是后端:

  • 执行Restful接口规范,不符合规范的接口驳回。
    • 劝退师就经历过,前东家有个JAVA架构师,连跨域和Restful都不知道,定的规范不成规范,一个简单查询接口返回五六级,其美名曰:“结构化数据”。
    • 遇到这种沉浸于自己世界不听劝的后端,我只有一句劝:要么把他搞走,要么跑路吧。
  • 必要的接口文档站点与 API 测试(如SwaggerApidoc),不接受文件传输形式的接口。
    • 早期的联调都是通过呐喊告知对方接口的标准。刚开始有什么不清楚的直接问就好了,但是到了后面的时候连写接口代码的那个人都忘了这接口怎么用,维护成本巨高。
    • 在没有接口文档站点出现前,接口文档以word文档出现,辅以postmanhttpcurl等工具去测试。但仍然不够直观,维护起来也难。
    • 以 web 交互为主的Swagger解决了测试,维护以及实时性的问题。从一定程度上也避免了扯皮问题:只有你后端没更新文档,这联调滞后时间就不该由前端担起。

然后是测试方面:

  1. 为了避免测试提出一些无效的 bug,最好提前参与测试的用例评审。
  2. 在实际开发中,如果有不合理功能需要修改,所有的修改都必须要求产品经理更新到 PRD 以及原型设计中。否则,测试如果不知道的话,会认为是 bug。
  3. 通过自测和编写Jest单元测试,将代码意外bug降到合理程度。
  4. 和测试一起吐槽后端的接口规范(滑稽)。

最后是运维方面:
除了CI/CD相关的,其实很可以和运维一起写写nginx和插件开发。

3. 效率沟通工具

可能大家比较习惯的是使用QQ或者微信去传输文件,日常沟通还行,就是对开发者不太友好。

如何是跨地区沟通,一般都是建议jira+slack的组合,但这两个工具稍微有些水土不服。

|

沟通项目管理
企业微信Teambition
钉钉Tapd
在使用Python来安装geopandas包时,由于geopandas依赖于几个其他的Python库(如GDAL, Fiona, Pyproj, Shapely等),因此安装过程可能需要一些额外的步骤。以下是一个基本的安装指南,适用于大多数用户: 使用pip安装 确保Python和pip已安装: 首先,确保你的计算机上已安装了Python和pip。pip是Python的包管理工具,用于安装和管理Python包。 安装依赖库: 由于geopandas依赖于GDAL, Fiona, Pyproj, Shapely等库,你可能需要先安装这些库。通常,你可以通过pip直接安装这些库,但有时候可能需要从其他源下载预编译的二进制包(wheel文件),特别是GDAL和Fiona,因为它们可能包含一些系统级的依赖。 bash pip install GDAL Fiona Pyproj Shapely 注意:在某些系统上,直接使用pip安装GDAL和Fiona可能会遇到问题,因为它们需要编译一些C/C++代码。如果遇到问题,你可以考虑使用conda(一个Python包、依赖和环境管理器)来安装这些库,或者从Unofficial Windows Binaries for Python Extension Packages这样的网站下载预编译的wheel文件。 安装geopandas: 在安装了所有依赖库之后,你可以使用pip来安装geopandas。 bash pip install geopandas 使用conda安装 如果你正在使用conda作为你的Python包管理器,那么安装geopandas和它的依赖可能会更简单一些。 创建一个新的conda环境(可选,但推荐): bash conda create -n geoenv python=3.x anaconda conda activate geoenv 其中3.x是你希望使用的Python版本。 安装geopandas: 使用conda-forge频道来安装geopandas,因为它提供了许多地理空间相关的包。 bash conda install -c conda-forge geopandas 这条命令会自动安装geopandas及其所有依赖。 注意事项 如果你在安装过程中遇到任何问题,比如编译错误或依赖问题,请检查你的Python版本和pip/conda的版本是否是最新的,或者尝试在不同的环境中安装。 某些库(如GDAL)可能需要额外的系统级依赖,如地理空间库(如PROJ和GEOS)。这些依赖可能需要单独安装,具体取决于你的操作系统。 如果你在Windows上遇到问题,并且pip安装失败,尝试从Unofficial Windows Binaries for Python Extension Packages网站下载相应的wheel文件,并使用pip进行安装。 脚本示例 虽然你的问题主要是关于如何安装geopandas,但如果你想要一个Python脚本来重命名文件夹下的文件,在原始名字前面加上字符串"geopandas",以下是一个简单的示例: python import os # 指定文件夹路径 folder_path = 'path/to/your/folder' # 遍历文件夹中的文件 for filename in os.listdir(folder_path): # 构造原始文件路径 old_file_path = os.path.join(folder_path, filename) # 构造新文件名 new_filename = 'geopandas_' + filename # 构造新文件路径 new_file_path = os.path.join(folder_path, new_filename) # 重命名文件 os.rename(old_file_path, new_file_path) print(f'Renamed "{filename}" to "{new_filename}"') 请确保将'path/to/your/folder'替换为你想要重命名文件的实际文件夹路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值