优化 Vue3 项目构建配置:别名、环境变量与目录管理

在 Vue3 项目开发进程中,合理配置项目构建环节的诸多细节,如设置别名提升模块导入效率、妥善管理环境变量以适配不同运行场景,以及精准把控项目目录结构,对项目的可维护性、扩展性及开发便利性有着深远影响。接下来,将逐步深入讲解关键配置步骤。

一、配置别名

1. 安装依赖

为了能精准处理路径相关操作,需安装 @types/node,此依赖为 Node.js 的类型定义,便于在 TypeScript 项目中更得心应手地操作文件路径等原生模块功能。执行命令:

npm i @types/node -D

2. 修改 vite.config.ts

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import { resolve } from 'path';

// 路径查找辅助函数,接收目录字符串,返回基于项目根目录的绝对路径
const pathResolve = (dir: string): string => {
  return resolve(__dirname, ".", dir);
};

// 定义别名对象,将常用路径映射为简洁易记的别名,方便模块导入
const alias: Record<string, string> = {
  "@": pathResolve("src"),
  "@views": pathResolve("src/views"),
  "@store": pathResolve("src/store/modules")
};

// 配置 Vite 项目,整合插件、别名设置等关键配置项
export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias
  },
});

3. 使用别名

在组件中导入模块时,即可使用别名替代冗长的相对路径。例如在 App.vue 中:

import HelloWorld from '@/components/HelloWorld.vue';

二、配置环境变量

1. 新建 env 文件

于项目根目录下创建三个关键的环境文件:

  • .env:存放通用环境变量,如本地运行端口号:

    # 本地运行端口号
    VITE_PORT = 8686
  • .env.development:针对本地开发环境定制变量,像环境标识及公共基础路径:

    # 本地环境
    VITE_USER_NODE_ENV = development
    
    # 公共基础路径
    VITE_PUBLIC_PATH = /
  • .env.production:用于线上生产环境专属变量设定:

    # 线上环境
    VITE_USER_NODE_ENV = production
    
    # 公共基础路径
    VITE_PUBLIC_PATH = /

2. 环境变量统一处理

在根目录下新建 build 文件夹,并于其中创建 index.ts 文件,用于规范化处理环境变量:

// 环境变量处理方法,将原始环境变量对象转换为适配项目需求的格式
export function wrapperEnv(envConf: Recordable): ViteEnv {
  const ret: any = {};

  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;
}

3. 环境类型定义

types\index.d.ts 文件里完善类型定义,确保类型安全:

type Recordable<T = any> = Record<string, T>;

interface ViteEnv {
  VITE_USER_NODE_ENV: "development" | "production";
  VITE_PUBLIC_PATH: string;
  VITE_PORT: number;
}

同时,更新 tsconfig.json 文件,将 build 文件夹内的文件纳入检测范围:

"include": [ 
  "src/**/*.ts",
  "build/*.ts",
  "src/**/*.d.ts",
  "src/**/*.tsx",
  "src/**/*.vue",
  "mock/*.ts",
  "types/*.d.ts",
  "vite.config.ts"
],

类似地,修改 tsconfig.node.json 文件:

"include": [
  "build/*.ts",
  "types/*.d.ts",
  "vite.config.ts"
]

4. 使用环境变量配置

调整 vite.config.ts 文件,充分利用环境变量:

import { defineConfig, loadEnv, ConfigEnv, UserConfig } from "vite";
import vue from '@vitejs/plugin-vue';
import { resolve } from 'path';
import { wrapperEnv } from './build';

// 路径查找辅助函数,同前
const pathResolve = (dir: string): string => {
  return resolve(__dirname, ".", dir);
};

// 定义别名对象,此处可按需进一步扩充别名
const alias: Record<string, string> = {
  "@": pathResolve("src"),
  "@views": pathResolve("src/views"),
  "@store": pathResolve("src/store")
};

// 动态配置 Vite 项目,依据不同环境加载相应变量并应用到配置项
export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
  const root = process.cwd();
  const env = loadEnv(mode, root);
  const viteEnv = wrapperEnv(env);

  return {
    base: viteEnv.VITE_PUBLIC_PATH,
    plugins: [vue()],
    resolve: {
      alias
    },
    server: {
      host: "0.0.0.0",
      port: viteEnv.VITE_PORT,
      https: false,
      open: true,
      // 本地跨域代理配置,按需调整目标及路径重写规则
      proxy: {
        "^/api": {
          target: "http://192.168.1.4:8688",
          changeOrigin: true,
          rewrite: path => path.replace(/^\/api/, "")
        }
      }
    },
  }
});

三、项目目录更新

当前项目目录结构已然成型,各部分分工明确:

|  .env
|  .env.development
|  .env.production
|  .gitignore
|   index.html
|   package-lock.json
|   package.json
|   README.md
|   tree.txt
|   tsconfig.json
|   tsconfig.node.json
|   vite.config.ts
|   
+---.vscode
|       extensions.json
|       
+---build
|       index.ts
|              
+---node_modules 
+---public
|       vite.svg
|       
+---src
|   |   App.vue
|   |   main.ts
|   |   style.css
|   |   vite-env.d.ts
|   |   
|   +---assets
|   |       vue.svg
|   |       
|   \---components
|           HelloWorld.vue
|           
\---types
        index.d.ts

其中,.env 系列文件把控环境变量;build 文件夹专注环境变量处理逻辑;src 承载核心业务代码;types 负责类型定义,协同合作,为项目稳健运行保驾护航。

通过精心雕琢别名配置、严谨管理环境变量及合理规划目录,Vue3 项目在开发流程、部署适配及代码组织层面将更加得心应手,助力高效开发与维护。

最后修改:2024 年 12 月 11 日
如果觉得我的文章对你有用,请随意赞赏