为什么需要工程化打包?
vue3+vite的工程,普遍都会在项目public文件夹,创建一个config.js文件,存放一些配置态的数据,用于在产品上线后,可能会根据需要修改参数值,从而达到线上配置数据目的。
但是config.js文件中的配置数据 ,都是在工程打包后默认就已经生成。无法做到在打包过程中修改配置。
如果同一个产品出售给另一家公司,但是此公司要求某某功能的审核流程级别只有2级,而当前产品的审核级别默认配置是3级。
怎么办?也许你会想到,工程打包后再修改配置文件不就行了嘛。如果要修改有10个甚至更多的配置呢?修改一次还好,万一是迭代产品,后期维护每打包一次都需要修改哦,那不累死才怪!!!
有没有办法在打包后,vite将config.js文件内容修改呢?答案是有的!
利用vite插件功能,打包时传入一个标记,区分是哪个公司,插件再根据标记写入不同的值到config.js中。
具体实现如下,假设config.js内容是一个审核流程,A公司需要3级审核,B公司只需要2级审核。
// 审核流程
window.zspReviewConfig = {
// 审核级别
"max_level": 3
};
一、编写插件,新建3个文件如下图
configJsData.js
// public/config.js配置文件
export default {
create(data) {
return `// 审核流程
window.zspReviewConfig = {
// 审核级别
"max_level": ${data.max_level}
};`
}
}
fsUtil.js负责写本地文件
import file from 'fs';
export default {
write(data, buildOutDir) {
const configJsPath = buildOutDir + '/config.js';
console.log('config.js 路径 ---> ', configJsPath)
file.writeFile(configJsPath, data, err => {
if (err) {
console.error('config.js 文件写入失败:' + err.message);
}
console.log('config.js 文件写入成功!');
})
}
}
vite-plugin-public-config.js负责定制A、B公司的默认功能
import fsUtil from "./fsUtil";
import configJsData from "./configJsData";
const pluginName = 'public-config';
export default function publicConfig(projectName) {
// 路径
let buildOutDir = '';
// 功能清单
const data = {max_level: 3}
// 返回的是插件对象
return {
// 名称
name: pluginName,
apply: 'build',
// 启动就调用
buildStart() {
switch (projectName) {
case 'A': // A公司
data.max_level = 3;
break;
case 'B': // B公司
data.max_level = 2;
break;
}
},
writeBundle(options, bundle) {
buildOutDir = options.dir;
},
closeBundle() {
fsUtil.write(configJsData.create(data), buildOutDir);
}
}
}
二、修改vite构建器的配置文件
1、引用插件
2、实例化插件,入参工程标记A
3、将A公司vite文件拷贝一份,只需要修改插件处,实例化的入参修改为B即可。
以上就是此次分享内容,创作不易,请关注、转发、看一看。谢谢!!!