slidev-addon-sm
Version:
slidev-addon slidev sm
147 lines (131 loc) • 5.61 kB
text/typescript
// vite.config.ts
import { defineConfig, PluginOption } from "vite";
import dotenv from "dotenv";
import path from "path";
import { tr } from "element-plus/es/locales.mjs";
// 3. 加载 .env 文件(优先级:环境专属 > 公共配置)
console.log("load .env file : .env." + process.env.NODE_ENV);
console.log("load .env, BaseUrl: " + process.env.URL_BASE);
function isDebug(): boolean {
if (process.env.NODE_ENV === "development") {
return true;
}
return false;
}
interface EnvConfig {
// 插件相关配置
pluginName: string;
isDebug: boolean;
isMinify: boolean;
logLevel: string;
// Vite 相关配置
port: number;
publicPath: string;
outDir: string;
sourcemap: boolean;
enableHmr: boolean;
}
const getEnvConfig = (): EnvConfig => {
const currentEnv = process.env.NODE_ENV || "development";
dotenv.config({
path: path.resolve(__dirname, `.env.${currentEnv}`),
override: true,
});
dotenv.config({
path: path.resolve(__dirname, ".env"),
override: false,
});
dotenv.config({
path: path.resolve(
process.env.PNPM_SCRIPT_SRC_DIR as string,
`.env.${currentEnv}`
),
override: true,
});
dotenv.config({
path: path.resolve(process.env.PNPM_SCRIPT_SRC_DIR as string, ".env"),
override: true,
});
console.log(process.env);
console.log("load .env file : .env." + currentEnv);
console.log("load dir : " + __dirname);
console.log("load .env, BaseUrl: " + process.env.URL_BASE);
return {
// 插件相关
pluginName: process.env.PLUGIN_NAME as string,
isDebug: isDebug(),
isMinify: (process.env.PLUGIN_MINIFY as string) === "true",
logLevel: process.env.LOG_LEVEL as string,
// Vite 相关
port: Number(process.env.VITE_PORT as string),
publicPath: process.env.VITE_PUBLIC_PATH as string,
outDir: (process.env.VITE_OUT_DIR as string) || "dist",
sourcemap: (process.env.VITE_SOURCEMAP as string) === "true",
enableHmr: (process.env.VITE_HMR as string) === "true",
};
};
const envConfig = getEnvConfig();
// 5. 开发环境调试插件(TypeScript 类型明确)
const devDebugPlugin = (): PluginOption => {
return {
name: "slidev-plugin-dev-log",
buildStart() {
console.log(
`[${envConfig.pluginName}] 开发模式启动(日志级别:${envConfig.logLevel})`
);
console.log(
`[调试信息] 端口:${envConfig.port},热更新:${envConfig.enableHmr}`
);
},
};
};
export default defineConfig({
base: envConfig.publicPath,
plugins: [envConfig.isDebug ? devDebugPlugin() : null],
// 开发服务器配置
server: {
host: "0.0.0.0",
port: envConfig.port, //无效?
open: envConfig.isDebug, // 开发环境自动打开浏览器
proxy: {
"/login": {
//"/login": {
target: process.env.URL_BASE, // 替换为你的后端接口基础地址(必填)
secure: !envConfig.isDebug, // 关键:禁用 SSL 证书验证(开发环境专用)
// target: "http://172.28.21.103",
// secure: false,
changeOrigin: true, // 开启跨域模拟(关键:伪装代理请求的Origin为后端域名)
//rewrite: (path) => path.replace("/login", "/login"), // 可选:去除请求路径中的 /api 前缀(根据后端接口是否带 /api 调整)
// 示例:若后端接口是 http://localhost:8080/user/login,前端请求 /api/user/login → 代理后变为 http://localhost:8080/user/login
// 若后端接口是 http://localhost:8080/api/user/login,可删除 rewrite 配置
},
// "/*/login": {
// //"/login": {
// target: process.env.URL_BASE, // 替换为你的后端接口基础地址(必填)
// secure: !envConfig.isDebug, // 关键:禁用 SSL 证书验证(开发环境专用)
// // target: "http://172.28.21.103",
// // secure: false,
// changeOrigin: true, // 开启跨域模拟(关键:伪装代理请求的Origin为后端域名)
// rewrite: (path) => path.replace(/\/*\/login/, "/login"), // 可选:去除请求路径中的 /api 前缀(根据后端接口是否带 /api 调整)
// // 示例:若后端接口是 http://localhost:8080/user/login,前端请求 /api/user/login → 代理后变为 http://localhost:8080/user/login
// // 若后端接口是 http://localhost:8080/api/user/login,可删除 rewrite 配置
// },
// "^(.*/)?login$": {
// //"/login": {
// target: process.env.URL_BASE, // 替换为你的后端接口基础地址(必填)
// secure: !envConfig.isDebug, // 关键:禁用 SSL 证书验证(开发环境专用)
// // target: "http://172.28.21.103",
// // secure: false,
// changeOrigin: true, // 开启跨域模拟(关键:伪装代理请求的Origin为后端域名)
// rewrite: (path) => path.replace(/^(.*\/)?login$/, "/login"), // 可选:去除请求路径中的 /api 前缀(根据后端接口是否带 /api 调整)
// // 示例:若后端接口是 http://localhost:8080/user/login,前端请求 /api/user/login → 代理后变为 http://localhost:8080/user/login
// // 若后端接口是 http://localhost:8080/api/user/login,可删除 rewrite 配置
// },
},
},
// 生产环境打包配置(可选)
// build: {
// outDir: "dist",
// assetsDir: "assets",
// },
});