mirror of
				https://github.com/pure-admin/vue-pure-admin.git
				synced 2025-11-03 13:44:47 +08:00 
			
		
		
		
	perf: 优化项目构建相关函数
This commit is contained in:
		
							parent
							
								
									a114dbb465
								
							
						
					
					
						commit
						e64cd0c8df
					
				@ -1,31 +0,0 @@
 | 
				
			|||||||
/** 处理环境变量 */
 | 
					 | 
				
			||||||
const warpperEnv = (envConf: Recordable): ViteEnv => {
 | 
					 | 
				
			||||||
  /** 此处为默认值 */
 | 
					 | 
				
			||||||
  const ret: ViteEnv = {
 | 
					 | 
				
			||||||
    VITE_PORT: 8848,
 | 
					 | 
				
			||||||
    VITE_PUBLIC_PATH: "",
 | 
					 | 
				
			||||||
    VITE_ROUTER_HISTORY: "",
 | 
					 | 
				
			||||||
    VITE_CDN: false,
 | 
					 | 
				
			||||||
    VITE_HIDE_HOME: "false",
 | 
					 | 
				
			||||||
    VITE_COMPRESSION: "none"
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  for (const envName of Object.keys(envConf)) {
 | 
					 | 
				
			||||||
    let realName = envConf[envName].replace(/\\n/g, "\n");
 | 
					 | 
				
			||||||
    realName =
 | 
					 | 
				
			||||||
      realName === "true" ? true : realName === "false" ? false : realName;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (envName === "VITE_PORT") {
 | 
					 | 
				
			||||||
      realName = Number(realName);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    ret[envName] = realName;
 | 
					 | 
				
			||||||
    if (typeof realName === "string") {
 | 
					 | 
				
			||||||
      process.env[envName] = realName;
 | 
					 | 
				
			||||||
    } else if (typeof realName === "object") {
 | 
					 | 
				
			||||||
      process.env[envName] = JSON.stringify(realName);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  return ret;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { warpperEnv };
 | 
					 | 
				
			||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
import { cdn } from "./cdn";
 | 
					import { cdn } from "./cdn";
 | 
				
			||||||
import { resolve } from "path";
 | 
					 | 
				
			||||||
import vue from "@vitejs/plugin-vue";
 | 
					import vue from "@vitejs/plugin-vue";
 | 
				
			||||||
 | 
					import { pathResolve } from "./utils";
 | 
				
			||||||
import { viteBuildInfo } from "./info";
 | 
					import { viteBuildInfo } from "./info";
 | 
				
			||||||
import svgLoader from "vite-svg-loader";
 | 
					import svgLoader from "vite-svg-loader";
 | 
				
			||||||
import type { PluginOption } from "vite";
 | 
					import type { PluginOption } from "vite";
 | 
				
			||||||
@ -26,7 +26,7 @@ export function getPluginsList(
 | 
				
			|||||||
    VueI18nPlugin({
 | 
					    VueI18nPlugin({
 | 
				
			||||||
      runtimeOnly: true,
 | 
					      runtimeOnly: true,
 | 
				
			||||||
      compositionOnly: true,
 | 
					      compositionOnly: true,
 | 
				
			||||||
      include: [resolve("locales/**")]
 | 
					      include: [pathResolve("../locales/**")]
 | 
				
			||||||
    }),
 | 
					    }),
 | 
				
			||||||
    viteBuildInfo(),
 | 
					    viteBuildInfo(),
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
 | 
				
			|||||||
@ -1,12 +1,80 @@
 | 
				
			|||||||
 | 
					import dayjs from "dayjs";
 | 
				
			||||||
import { readdir, stat } from "node:fs";
 | 
					import { readdir, stat } from "node:fs";
 | 
				
			||||||
 | 
					import { fileURLToPath } from "node:url";
 | 
				
			||||||
 | 
					import { dirname, resolve } from "node:path";
 | 
				
			||||||
import { sum, formatBytes } from "@pureadmin/utils";
 | 
					import { sum, formatBytes } from "@pureadmin/utils";
 | 
				
			||||||
 | 
					import { dependencies, devDependencies, name, version } from "../package.json";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** 启动`node`进程时所在工作目录的绝对路径 */
 | 
				
			||||||
 | 
					const root: string = process.cwd();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @description 根据可选的路径片段生成一个新的绝对路径
 | 
				
			||||||
 | 
					 * @param dir 路径片段,默认`build`
 | 
				
			||||||
 | 
					 * @param metaUrl 模块的完整`url`,如果在`build`目录外调用必传`import.meta.url`
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					const pathResolve = (dir = ".", metaUrl = import.meta.url) => {
 | 
				
			||||||
 | 
					  // 当前文件目录的绝对路径
 | 
				
			||||||
 | 
					  const currentFileDir = dirname(fileURLToPath(metaUrl));
 | 
				
			||||||
 | 
					  // build 目录的绝对路径
 | 
				
			||||||
 | 
					  const buildDir = resolve(currentFileDir, "build");
 | 
				
			||||||
 | 
					  // 解析的绝对路径
 | 
				
			||||||
 | 
					  const resolvedPath = resolve(currentFileDir, dir);
 | 
				
			||||||
 | 
					  // 检查解析的绝对路径是否在 build 目录内
 | 
				
			||||||
 | 
					  if (resolvedPath.startsWith(buildDir)) {
 | 
				
			||||||
 | 
					    // 在 build 目录内,返回当前文件路径
 | 
				
			||||||
 | 
					    return fileURLToPath(metaUrl);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  // 不在 build 目录内,返回解析后的绝对路径
 | 
				
			||||||
 | 
					  return resolvedPath;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** 设置别名 */
 | 
				
			||||||
 | 
					const alias: Record<string, string> = {
 | 
				
			||||||
 | 
					  "@": pathResolve("../src"),
 | 
				
			||||||
 | 
					  "@build": pathResolve()
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** 平台的名称、版本、依赖、最后构建时间 */
 | 
				
			||||||
 | 
					const __APP_INFO__ = {
 | 
				
			||||||
 | 
					  pkg: { name, version, dependencies, devDependencies },
 | 
				
			||||||
 | 
					  lastBuildTime: dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss")
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** 处理环境变量 */
 | 
				
			||||||
 | 
					const warpperEnv = (envConf: Recordable): ViteEnv => {
 | 
				
			||||||
 | 
					  // 默认值
 | 
				
			||||||
 | 
					  const ret: ViteEnv = {
 | 
				
			||||||
 | 
					    VITE_PORT: 8848,
 | 
				
			||||||
 | 
					    VITE_PUBLIC_PATH: "",
 | 
				
			||||||
 | 
					    VITE_ROUTER_HISTORY: "",
 | 
				
			||||||
 | 
					    VITE_CDN: false,
 | 
				
			||||||
 | 
					    VITE_HIDE_HOME: "false",
 | 
				
			||||||
 | 
					    VITE_COMPRESSION: "none"
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for (const envName of Object.keys(envConf)) {
 | 
				
			||||||
 | 
					    let realName = envConf[envName].replace(/\\n/g, "\n");
 | 
				
			||||||
 | 
					    realName =
 | 
				
			||||||
 | 
					      realName === "true" ? true : realName === "false" ? false : realName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (envName === "VITE_PORT") {
 | 
				
			||||||
 | 
					      realName = Number(realName);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    ret[envName] = realName;
 | 
				
			||||||
 | 
					    if (typeof realName === "string") {
 | 
				
			||||||
 | 
					      process.env[envName] = realName;
 | 
				
			||||||
 | 
					    } else if (typeof realName === "object") {
 | 
				
			||||||
 | 
					      process.env[envName] = JSON.stringify(realName);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return ret;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const fileListTotal: number[] = [];
 | 
					const fileListTotal: number[] = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/** 获取指定文件夹中所有文件的总大小 */
 | 
				
			||||||
 * @description 获取指定文件夹中所有文件的总大小
 | 
					const getPackageSize = options => {
 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
export const getPackageSize = options => {
 | 
					 | 
				
			||||||
  const { folder = "dist", callback, format = true } = options;
 | 
					  const { folder = "dist", callback, format = true } = options;
 | 
				
			||||||
  readdir(folder, (err, files: string[]) => {
 | 
					  readdir(folder, (err, files: string[]) => {
 | 
				
			||||||
    if (err) throw err;
 | 
					    if (err) throw err;
 | 
				
			||||||
@ -32,3 +100,5 @@ export const getPackageSize = options => {
 | 
				
			|||||||
    files.length === 0 && callback(0);
 | 
					    files.length === 0 && callback(0);
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export { root, pathResolve, alias, __APP_INFO__, warpperEnv, getPackageSize };
 | 
				
			||||||
 | 
				
			|||||||
@ -1,30 +1,13 @@
 | 
				
			|||||||
import dayjs from "dayjs";
 | 
					 | 
				
			||||||
import { resolve } from "path";
 | 
					 | 
				
			||||||
import pkg from "./package.json";
 | 
					 | 
				
			||||||
import { warpperEnv } from "./build";
 | 
					 | 
				
			||||||
import { getPluginsList } from "./build/plugins";
 | 
					import { getPluginsList } from "./build/plugins";
 | 
				
			||||||
import { include, exclude } from "./build/optimize";
 | 
					import { include, exclude } from "./build/optimize";
 | 
				
			||||||
import { type UserConfigExport, type ConfigEnv, loadEnv } from "vite";
 | 
					import { type UserConfigExport, type ConfigEnv, loadEnv } from "vite";
 | 
				
			||||||
 | 
					import {
 | 
				
			||||||
/** 当前执行node命令时文件夹的地址(工作目录) */
 | 
					  root,
 | 
				
			||||||
const root: string = process.cwd();
 | 
					  alias,
 | 
				
			||||||
 | 
					  warpperEnv,
 | 
				
			||||||
/** 路径查找 */
 | 
					  pathResolve,
 | 
				
			||||||
const pathResolve = (dir: string): string => {
 | 
					  __APP_INFO__
 | 
				
			||||||
  return resolve(__dirname, ".", dir);
 | 
					} from "./build/utils";
 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/** 设置别名 */
 | 
					 | 
				
			||||||
const alias: Record<string, string> = {
 | 
					 | 
				
			||||||
  "@": pathResolve("src"),
 | 
					 | 
				
			||||||
  "@build": pathResolve("build")
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const { dependencies, devDependencies, name, version } = pkg;
 | 
					 | 
				
			||||||
const __APP_INFO__ = {
 | 
					 | 
				
			||||||
  pkg: { dependencies, devDependencies, name, version },
 | 
					 | 
				
			||||||
  lastBuildTime: dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss")
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default ({ mode }: ConfigEnv): UserConfigExport => {
 | 
					export default ({ mode }: ConfigEnv): UserConfigExport => {
 | 
				
			||||||
  const { VITE_CDN, VITE_PORT, VITE_COMPRESSION, VITE_PUBLIC_PATH } =
 | 
					  const { VITE_CDN, VITE_PORT, VITE_COMPRESSION, VITE_PUBLIC_PATH } =
 | 
				
			||||||
@ -61,7 +44,7 @@ export default ({ mode }: ConfigEnv): UserConfigExport => {
 | 
				
			|||||||
      chunkSizeWarningLimit: 4000,
 | 
					      chunkSizeWarningLimit: 4000,
 | 
				
			||||||
      rollupOptions: {
 | 
					      rollupOptions: {
 | 
				
			||||||
        input: {
 | 
					        input: {
 | 
				
			||||||
          index: pathResolve("index.html")
 | 
					          index: pathResolve("./index.html", import.meta.url)
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        // 静态资源分类打包
 | 
					        // 静态资源分类打包
 | 
				
			||||||
        output: {
 | 
					        output: {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user