NodeJS打包时实现改写文件

执行

安装

1
npm install archiver

脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
const fs = require('fs');
const projectNames = ['main-app'];
// console.log('current path ', process.cwd())
// 读取打包后的JavaScript文件
const args = process.argv.slice(2);
if(args.length==0){
console.warn('请输入参数',projectNames)
return;
}
let projectName = args[0];
if(!projectName.endsWith('-app')){
console.log("项目名称转换:",projectName,' -> ',projectName+'-app')
projectName+='-app'
}

if(projectNames.indexOf(projectName)==-1){
console.warn('参数错误',projectName)
console.warn('请输入正确参数',projectNames)
return;
}

const filePath = '../dist/'+projectName+'/config.js'; // 替换为你实际的文件路径
const fileData = fs.readFileSync(filePath, 'utf8');

// 在文件中查找需要替换的域名,并进行替换
const oldAddress = '\'(?:https?:\\/\\/)?((([0-9]{0,3}\\.){3}[0-9]{0,3}:[0-9]{1,})|([\\w.-]+(?:\\.[\\w.-]+)+))'; // 替换为需要修改的旧地址
const newAddress = '\''; // 替换为新地址
const oldPassword = 'password: \'(.*)\''; // 替换为需要修改的旧地址
const newPassword = 'password: \'\''; // 替换为新地址
const modifiedData = fileData.replace(new RegExp(oldAddress, 'g'), newAddress);
const modifiedData = modifiedData.replace(new RegExp(oldPassword, 'g'), newPassword);

// 将修改后的内容写回文件
fs.writeFileSync(filePath, modifiedData, 'utf8');

console.log('文件修改完成!');
console.log('文件打包开始!');
const archiver = require('../'+projectName+'/node_modules/archiver');
// 创建一个输出流,用于将文件写入 zip 包中
const output = fs.createWriteStream(__dirname + '/../dist/'+projectName+'.zip');
const archive = archiver('zip', {
zlib: { level: 9 } // 设置压缩级别(可选)
});
// 将输出流与 archiver 绑定
archive.pipe(output);
// 向 zip 包中添加构建好的前端代码,路径根据实际情况进行调整
archive.directory(__dirname + '/../dist/'+projectName, false);
// 完成 zip 打包
archive.finalize();
console.log('文件打包完成!', output.path);

运行

1
node ../devops/modifyScript.js main-app

本文地址: https://github.com/maxzhao-it/blog/post/21566213545/