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起来没那么慢,比起一个个改好多啦。

写在最后

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/930271.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【5G】5G Physical Layer物理层(一)

5G多址接入和物理层与长期演进(LTE)存在一些差异。在下行方向,5G与LTE相似,依旧采用正交频分多址(OFDMA)。而在上行方向,5G采用了OFDMA和单载波频分多址(SC-FDMA)&#x…

Docker 安装 中文版 GitLab

Docker 安装系列 安装GitLab、解决服务器内存不足问题、使用域名/IP地址访问项目 1、拉取 [rootTseng ~]# docker pull twang2218/gitlab-ce-zh:latest latest: Pulling from twang2218/gitlab-ce-zh 8ee29e426c26: Pull complete 6e83b260b73b: Pull complete e26b65fd11…

力扣-图论-4【算法学习day.54】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…

减少30%人工处理时间,AI OCR与表格识别助力医疗化验单快速处理

在医疗行业,化验单作为重要的诊断依据和数据来源,涉及大量的文字和表格信息,传统的手工输入和数据处理方式不仅繁琐,而且容易出错,给医院的运营效率和数据准确性带来较大挑战。随着人工智能技术的快速发展,…

剖析千益畅行,共享旅游-卡,合规运营与技术赋能双驱下的旅游新篇

在数字化浪潮席卷各行各业的当下,旅游产业与共享经济模式深度融合,催生出旅游卡这类新兴产品。然而,市场乱象丛生,诸多打着 “共享” 幌子的旅游卡弊病百出,让从业者与消费者都深陷困扰。今天,咱们聚焦技术…

Mac曲线救国实现Bandizip右键一级菜单

一、前言 个人认为:Bandizip是Mac上最好用的压缩软件,没有之一。 在Mac系统上,学习版的Bandizip由于签名检验问题无法在访达右键的一级菜单显示 解压相关菜单。 有能力的,希望还是支持正版,找找优惠渠道应该100左右。…

理解 package.json 中版本号符号

今天,聊一聊在前端开发中, package.json 中怎么看版本号符号。 版本号符号的解释 版本号通常由三部分组成:主版本号、次版本号、补丁版本号,格式为 major.minor.patch。常见的符号有: ^:更新时允许自动…

【自用】管材流转项目前端重部署流程 vue2 webpackage4 vuecli4

一、配置 1.下载项目,使用 IDEA 打开,并配置 Nodejs 它提示我,需要 Node.js,因为 nodejs 14 的 installer 已经官网已经找不到了,使用 fnm 又太麻烦, 所以直接采用在 IDEA 中下载的方式就好了。 2.清除缓…

【优选算法篇】:双指针算法--开启高效编码的两把“魔法指针”,练习题演练

✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:c篇–CSDN博客 文章目录 一.双指针算法二.例题1.移动零2.复写零3.快乐数4.盛水最多的容器5.…

Figma入门-旋转效果

Figma入门-旋转效果 前言 在之前的工作中,大家的原型图都是使用 Axure 制作的,印象中 Figma 一直是个专业设计软件。 最近,很多产品朋友告诉我,很多原型图都开始用Figma制作了,并且很多组件都是内置的,对…

ffmpeg转码与加水印

文章目录 转码 与加水印引入jar包代码ffmpeg安装错误解决方法 转码 与加水印 引入jar包 <dependency><groupId>net.bramp.ffmpeg</groupId><artifactId>ffmpeg</artifactId><version>0.6.2</version></dependency>代码 impo…

网络原理 网络协议栈

POSIX API与网络协议栈 unix有不同的衍生版本&#xff0c;针对不同的版本&#xff0c;通过Posix定义了一套标准的操作系统接口API&#xff0c;使得不同的开发版本可以使用相同的API调用&#xff0c;具有可移植性。 网络连接相关API&#xff1a; 客户端 socket() bind() con…

将vscode上的项目提交到github上

1.windows终端中 创建github仓库 创建完成 提交代码 git init git config --global user.email "fuyulai2024163.com" git config --global user.name "Fuyulai-Hub" git add . git commit -m "first commit" git remote add origin https://g…

P4645 [COCI2006-2007#3] BICIKLI(Tarjan+topsort求到某点的方案数)

P4645 [COCI2006-2007#3] BICIKLI - 洛谷 | 计算机科学教育新生态 思路&#xff1a; 我们考虑输出inf的情况&#xff0c;可以发现当从1出发到2经过的任意一个点处于一个环内时&#xff0c;路径条数是无穷多的。 有向图上从s到t的经过点&#xff0c;就是从s出发所能经过的所有…

Linux C/C++编程中的多线程编程基本概念

【图书推荐】《Linux C与C一线开发实践&#xff08;第2版&#xff09;》_linux c与c一线开发实践pdf-CSDN博客《Linux C与C一线开发实践&#xff08;第2版&#xff09;&#xff08;Linux技术丛书&#xff09;》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 (jd.com…

MongoDB整合SpringBoot

MongoDB整合SpringBoot 环境准备 1.引入依赖 <!--spring data mongodb--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> 2.配置yml spr…

记录过程校准器:精准测量的未来驱动力与市场蓝海

在科技日新月异的今天&#xff0c;精确测量已成为工业制造、科学研究、环境监测等众多领域的核心要素。记录过程校准器&#xff0c;作为确保测量设备准确性和可靠性的关键工具&#xff0c;正扮演着越来越重要的角色。随着智能制造、物联网技术的快速发展&#xff0c;以及全球对…

【NLP 9、实践 ① 五维随机向量交叉熵多分类】

目录 五维向量交叉熵多分类 规律&#xff1a; 实现&#xff1a; 1.设计模型 2.生成数据集 3.模型测试 4.模型训练 5.对训练的模型进行验证 调用模型 你的平静&#xff0c;是你最强的力量 —— 24.12.6 五维向量交叉熵多分类 规律&#xff1a; x是一个五维(索引)向量&#xff…

STM32使用RCC(Reset Clock Contorl,复位时钟控制器)配置时钟以及时钟树

RCC主要作用 设置系统时钟SYSCLK&#xff08;System Clock&#xff09;频率&#xff1b;设置AHB、APB2、APB1以及各个外设分频因子&#xff0c;从而设置HCLK、PCLK2、PCLK1以及各个外设的时钟频率&#xff1b;控制AHB、APB2、APB1这三条总线时钟以及每个外设的时钟开启&#xf…

使用mtools搭建MongoDB复制集和分片集群

mtools介绍 mtools是一套基于Python实现的MongoDB工具集&#xff0c;其包括MongoDB日志分析、报表生成及简易的数据库安装等功能。它由MongoDB原生的工程师单独发起并做开源维护&#xff0c;目前已经有大量的使用者。 mtools所包含的一些常用组件如下&#xff1a; mlaunch支…