一、关键字
关键词:Node.js、自动化脚本、批量替换、前端工程化、CI/CD
二、项目背景
在公司海外业务拓展过程中,我们 上线了多款产品,这些项目之间:
-
共用同一套主代码;
-
但 品牌名称、AppID、CDN 域名、图片资源 均不同;
-
每次新项目上线都需要手动替换十几个关键配置。
这样的维护方式存在几个明显问题:
-
手动修改容易出错 ------ 尤其是命名不一致、路径遗漏;
-
修改效率低 ------ 每次都要全局搜索替换;
-
版本管理困难 ------ 替换操作不可追溯、难以回滚;
-
重复劳动严重 ------ 多地区版本间修改逻辑高度相似。
为了让项目切换更安全、更自动化,我们基于 Node.js 编写了一个智能替换脚本,实现 「一键批量修改 + 图片替换」。
三、总体思路
我们的目标是:
让项目从旧版本(如 Happy)切换到新版本(如 HappyCopy)时,只需执行一次命令。
核心任务包括:
| 模块 | 功能 |
|---|---|
| 🔁 项目名替换 | Happy → HappyCopy |
| 🆔 AppID 替换 | appId: "1" → appId: "5" |
| 📦 构建脚本更新 | 自动修改 package.json scripts |
| 🖼️ 图片替换 | 按文件名匹配并覆盖旧图片,自动备份原文件 |
四、方案设计
脚本分为两大部分:
1️⃣ 文本替换部分
使用 Node.js 内置模块 fs、path 实现全项目递归扫描:
c
const oldValue = "Happy";
const newValue = "HappyCopy";
const appIdPattern = /appId:\s*["'`](\d+)["'`]/g;
替换逻辑包括:
-
同时处理大小写版本(Happy / happy);
-
跳过不应修改的配置,如:release: "https://xxxxx/config.json"
支持替换计数与日志输出:
🔄 [UPDATE] src/pages/home/index.tsx(共 5 处)
并在结束时统计总耗时与修改量:
c
✅ 替换完成!
📂 共修改文件数: 12
🔢 总替换次数: 46
⏱️ 耗时: 2.13 秒
2️⃣ 图片替换部分
图片定制是地区化项目中最容易遗漏的环节。
例如,每个品牌都有自己的 logo、banner、icon。
我们采用文件名匹配策略:
-
新图片放入 ./replace-images/
-
旧图片在项目内查找同名文件并覆盖
-
自动备份原文件到 ./backup-images/
核心代码如下:
c
// 备份旧文件
fs.copyFileSync(targetPath, backupPath);
// 替换为新图片
fs.copyFileSync(newImgPath, targetPath);
执行结果示例:
c
🚀 开始批量替换全项目图片...
✅ 替换: src/assets/logo.png
⚠️ 未找到匹配文件: banner_home.png
🎯 替换完成!
✅ 替换: 15 张
⚠️ 未找到: 2 张
💾 备份目录: backup-images
五、使用方法
1️⃣ 创建脚本
将脚本保存为:
c
/replace.js
2️⃣ 修改参数
根据目标项目修改以下变量:
const oldValue = "Happy";
const newValue = "HappyCopy";
3️⃣ 执行命令
在项目根目录运行:
node ./replace.js
脚本会:
-
递归遍历 指定目录
-
执行替换逻辑
-
输出详细日志与统计信息
-
自动备份旧图片
六、实际收益
通过这个自动化脚本,我们在项目切换中实现了:
| 效果 | 说明 |
|---|---|
| 💨 效率提升 | 从手工 30 分钟缩短到 20 秒内完成 |
| 💥 错误率降低 | 无遗漏、无误替换 |
| 🧩 结构可扩展 | 后续可添加 API 域名、主题色、环境变量替换 |
| 🧯 安全回退 | 旧图片自动备份,随时可恢复 |
| 🧰 CI/CD 可集成 | 可接入到 Jenkins、GitHub Actions 等流水线中自动执行 |
七、总结
在多品牌共用代码的工程中,「自动化」不是可选项,而是必须项。
这个脚本解决了团队反复手动替换带来的低效与风险,实现了:
一键切换 → 安全替换 → 自动备份 → 快速上线
未来还可以进一步扩展:
-
环境变量自动同步(.env 文件)
-
Git 自动提交与打 tag
-
自动上传新图片至 CDN
八、结语
想要源码的发私信
小工具虽小,但能解决团队中反复出现的痛点问题。
自动化不是炫技,而是提升团队协作效率与质量的关键。
当你在复制粘贴项目时,请记得:能用代码解决的重复工作,绝不要手动做第二次。