123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- import dayjs from "dayjs";
- import { readdir, stat } from "node:fs";
- import { fileURLToPath } from "node:url";
- import { dirname, resolve } from "node:path";
- import { sum, formatBytes } from "@pureadmin/utils";
- import {
- name,
- version,
- engines,
- dependencies,
- devDependencies
- } 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()
- };
- /** 平台的名称、版本、运行所需的`node`和`pnpm`版本、依赖、最后构建时间的类型提示 */
- const __APP_INFO__ = {
- pkg: { name, version, engines, 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 getPackageSize = options => {
- const { folder = "dist", callback, format = true } = options;
- readdir(folder, (err, files: string[]) => {
- if (err) throw err;
- let count = 0;
- const checkEnd = () => {
- ++count == files.length &&
- callback(format ? formatBytes(sum(fileListTotal)) : sum(fileListTotal));
- };
- files.forEach((item: string) => {
- stat(`${folder}/${item}`, async (err, stats) => {
- if (err) throw err;
- if (stats.isFile()) {
- fileListTotal.push(stats.size);
- checkEnd();
- } else if (stats.isDirectory()) {
- getPackageSize({
- folder: `${folder}/${item}/`,
- callback: checkEnd
- });
- }
- });
- });
- files.length === 0 && callback(0);
- });
- };
- export { root, pathResolve, alias, __APP_INFO__, warpperEnv, getPackageSize };
|