当前位置: 首页 > news >正文

gulp应该怎么用,前端批量自动化替换文件

背景

最近公司准备把所有项目中用到的国际化相关的key规范化,原因是:

  1. 一直以来公司的app和web端 在针对相同的需求以及相同的国际化语言,需要设置不同的两份国际化文件,难以维护
  2. 旧版的国际化文件中,存在的大量值重复,但是key不相同的地方,如:以“取消”值为例
    • ‘取消’ — ‘cancel’ ---- ‘xxx_cancel’
    • 三个key,都是用来表示 “取消”
  3. 更新一次国际化语言的方式,奇葩至极,每次都需要同步最近一次的国际化,然后整合;
  4. 之前的国际化key,不规范,五花八门的写法,中文、数字、英文都有,这次也需要一并优化。

目的

  1. app和web端针对相同的设计,使用同一份国际化配置;
  2. 优化国际化的更新

难点

公司目前除了app端外,web端的服务一共有7个项目设计到了需要更改国际化,所以

需要把每个项目中旧的国际化key替换为新版本国际化的key

怎么样快速并且不漏掉旧key的替换呢?

分析

  1. 代码中特定的关键字;
  2. 已有一份xlsx文档,上面记录了新旧key的记录;

这个时候,脑海中已经浮现出来自动化的批量处理,好在之前有过类似的经历,使用gulp处理过主题相关的自动化任务,不是重点就不提了。

所以这里也打算使用gulp来实现自动化任务,来实现一个名叫search-replace的任务:完成在前端项目中批量并且精准匹配一定特性的关键词,然后替换成想要的值


需要注意
自动化工具始终是辅助的,最终还是我们要手动确认一下每个文件中替换的位置
为什么呢
不同人在处理国际化上,有自己独特的使用方式
导致项目中国际化的写法五花八门,我们没办法精准匹配

gulp

本次的主角,官网
在这里插入图片描述

具体实现

  • 项目中安装需要的依赖,由于该自动化任务,只用于开发中的依赖,安装记得使用 --save-dev || -D
npm i -D gulp gulp-replace xlsx
  • 准备好需要处理的xlsx文件,本次博主按照如下的xlsx格式讲述此案例的
oldkeynewkey
取消key_main_cancel
确定key_main_confirm
  • 在根目录中创建 gulpfile.js文件
const gulp = require("gulp");
const replace = require("gulp-replace");
const filelist = require("gulp-filelist");
const XLSX = require("xlsx");/*** 获取关键词映射*/
const getKeywordMap = () => {const workbook = XLSX.readFile("./key.xlsx");const sheetName = workbook.SheetNames[0];const sheet = workbook.Sheets[sheetName];const jsonData = XLSX.utils.sheet_to_json(sheet);const oldKey = "oldkey";const newKey = "newkey";let result = {};jsonData.forEach(item => {if (!item[oldKey] || !item[newKey]) {return;}result[item[oldKey]] = item[newKey]});return result;
};/*** 全局检索,替换关键词*/
gulp.task("search-replace", () => {const keyMap = getKeywordMap();// 检索 可能出现国际化key的文件类型,这里博主的只有js jsx 大家酌情return gulp.src(["./src/**/*.js", "./src/**/*.jsx"]).pipe(// 正则匹配,前后加上单或者双引号,防止误匹配// 这里最好是加上引号,将错误识辨降低到最低replace(new RegExp(`(["'])(${Object.keys(keyMap).join("|")})\\1`, "g"),function (match) {// match 去掉单双引号match = match.replace(/^['"]|['"]$/g, "");return `"${keyMap[match]}"`;})).pipe(gulp.dest("./src")) // 将替换后的文件输出到原始文件夹.on("end", function () {// 完成});
});gulp.task("replace-key", gulp.series("search-replace"));
  • 执行命令 gulp replace-key,请放到package.json的scripts中,毕竟我们没有全局安装gulp。
  • 检查每个被替换的文件,搂一眼没什么问题就可以了
    在这里插入图片描述
    博主执行完自动化脚本,一共更改了191个文件,随便打开一个文件,我们可以通过编辑器的git插件可以看到
    在这里插入图片描述
    其实更改的地方不是很多,我们check起来没那么慢,比起一个个改好多啦。

写在最后

显然大家可以看到,实现起来没有想象中那么麻烦,不过呢,要想到这种解决方案,首先我们自己需要充实我们的项目经历和经验,多去发现不同的解决方案。

这样,当遇到棘手的问题,总有一种方案是契合现在的问题的。
好啦,废话就说这么多,如果有帮助到大家,记得给博主点个小赞赞,抱拳感谢!!!

http://www.lryc.cn/news/499937.html

相关文章:

  • 石岩湿地公园的停车场收费情况
  • A7157 基于Java+SSM+mysql+jsp的医院挂号系统的设计与实现 源码 文档 配置 全套资料
  • 数据处理与统计分析——11-Pandas-Seaborn可视化
  • 【计算机网络】实验13:运输层端口
  • STL之适配器(adapters)_下
  • 基于51单片机64位病床呼叫系统设计( proteus仿真+程序+设计报告+原理图+讲解视频)
  • 安装 Zookeeper 和 Kafka
  • 操作系统输入输出系统知识点
  • C语言控制语句与案例
  • JVM的内存布局
  • aws codepipeline + github + sonarqube + jenkins实践CI/CD
  • mistralai 部署笔记
  • Java——异常机制(上)
  • 坐标系,向量_batch及向量点乘部分知识
  • 【计算机网络】期末速成(2)
  • 【设计模式】结构型设计模式总结之代理模式、装饰模式、外观模式、享元模式
  • 11进阶篇:专业课论文阅读方向指南(2025版)
  • watch里可以写异步吗
  • 基于 Spring Boot + Vue 的宠物领养系统设计与实现
  • leetcode399:除法求值
  • 【10】MySQL中的加密功能:如何使用MD5加密算法进行数据加密
  • CSS的2D和3D动画效果
  • 30天学会Go--第9天 GO语言 Mysql 学习与实践
  • 跟李笑来学美式俚语(Most Common American Idioms): Part 54
  • Angular由一个bug说起之十一:排序之后无法展开 Row
  • 使用 Flutter 进行移动应用开发:深入探索
  • 2024年天津市职业院校技能大赛高职组 “信息安全管理与评估”样题第三阶段
  • docker批量创建cloudstack虚拟主机脚本
  • npm发布插件到私有仓库保姆级教程
  • WinRAR V7.10纯净体验