赞
踩
为什么需要工程化打包?
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即可。
以上就是此次分享内容,创作不易,请关注、转发、看一看。谢谢!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。