1.说明
本节我们完善build\utils.ts
文件。
2.第一部分
除了这个process,应该也没有要解释的吧。
Node中文文档-process
export function isDevFn(mode: string): boolean {
return mode === 'development';
}
export function isProdFn(mode: string): boolean {
return mode === 'production';
}
/**
* Whether to generate package preview
*/
export function isReportMode(): boolean {
return process.env.REPORT === 'true';
}
3.安装dotenv
dotenv
依赖的作用:从.evn
文件流Buffer
中读取属性输出一个对象。
那么和我们之前的加载环境变量的区别:
Vite
的loadEnv()
:这个方法Vite
的官网上貌似没有开放,而且获取的文件是指定的,获取的对象需要我们自己格式化一下。
Vben
的wrapperEnv()
:这是一个格式化环境变量的方法。
dotenv
:是一个依赖,其功能不仅仅是获取环境变量,当然我们目前只用它来获取指定的.env
文件。
dotenv的npm首页
yarn add dotenv --dev
4.第二部分
import fs from 'fs';
import path from 'path';
import dotenv from 'dotenv';
/**
* Get the environment variables starting with the specified prefix
* @param match prefix
* @param confFiles ext
*/
export function getEnvConfig(match = 'VITE_GLOB_', confFiles = ['.env', '.env.production']) {
let envConfig = {};
// ↓循环文件名
confFiles.forEach((item) => {
try {
// ↓同步读取根目录下指定的文件,将读取的六传入dotenv输出对象
const env = dotenv.parse(fs.readFileSync(path.resolve(process.cwd(), item)));
// ↓将新获取的对象追加到结果中,相同的覆盖
envConfig = { ...envConfig, ...env };
} catch (error) {}
});
// ↓检查输出结果
Object.keys(envConfig).forEach((key) => {
// ↓如果不是以传入的match变量开的就直接删除
const reg = new RegExp(`^(${match})`);
if (!reg.test(key)) {
Reflect.deleteProperty(envConfig, key);
}
});
return envConfig;
}
/**
* Get user root directory
* @param dir file path
*/
export function getRootPath(...dir: string[]) {
return path.resolve(process.cwd(), ...dir);
}
上一章
第四十七章-Vite插件-vite-plugin-html
下一章
第四十九章-Vben的获取配置文件名的方法