vue-vben-admin 解析四之 vite.config.ts 分析(1)

本文深入探讨了Vue3项目的 vite.config.ts 配置文件,基于vue-vben-admin,详细分析了配置选项和使用的build优化函数,帮助读者理解Vite在Vue3应用中的构建过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初学vue3-demo:https://github.com/Miofly/vue3-vite-vuex-demo
vite.config.tsvite 的配置文件,下面将对 vite.config.ts 进行逐步分析

/**
 * @description 拼接路径
 * @author wfd
 * @date 2021/10/8 11:06
 * @example  process.cwd() 返回 Node.js 进程的当前工作目录
 * @param dir 要拼接的路径
 */
function pathResolve(dir: string) {
  return resolve(process.cwd(), '.', dir);
}

/** 从 package.json 文件中拿到一些字段的信息 */
const { dependencies, devDependencies, name, version } = pkg;

/** 将从 package.json 文件中拿到的信息组装起来作为 __APP_INFO__ */
const __APP_INFO__ = {
  pkg: { dependencies, devDependencies, name, version },
  lastBuildTime: moment().format('YYYY-MM-DD HH:mm:ss'),
};

/**
 * @description vite 配置
 * @author wfd
 * @date 2021/10/8 14:59
 * @example
 * @param command 命令 serve or build
 * @param mode 运行模式
 */
export default ({ command, mode }: ConfigEnv): UserConfig => {
  const root = process.cwd();

  /**
   * @description 检查process.cwd()路径下.env.development.local、.env.development、.env.local、.env这四个环境文件。
     输出NODE_ENV和VITE_开头的键值对。
     VITE_开头的键值对后面的不会覆盖前面的。
     NODE_ENV的值后面的会覆盖前面的。
   * @author wfd
   * @date 2021/10/8 10:17
   * @example
   */
  const env = loadEnv(mode, root);
  /**
	 * @example 获取到的 env 变量示例如下
	   {
		   VITE_USE_MOCK: 'true',
		   VITE_PUBLIC_PATH: '/',
		   VITE_PROXY: '[["/basic-api","http://localhost:3000"],["/upload","http://localhost:3300/upload"]]',
		   VITE_DROP_CONSOLE: 'false',
		   VITE_GLOB_API_URL: '/basic-api',
		   VITE_GLOB_UPLOAD_URL: '/upload',
		   VITE_GLOB_API_URL_PREFIX: '',
		   VITE_PORT: '3100',
		   VITE_GLOB_APP_TITLE: 'Vben Admin',
		   VITE_GLOB_APP_SHORT_NAME: 'vue_vben_admin'
		 }
	 */

  // 将上述的字符串转换成了 布尔值、数值、数组等,
  const viteEnv = wrapperEnv(env);
  /**
   * @example wrapperEnv 转换后的 viteEnv 变量示例如下
     {
        VITE_USE_MOCK: true,
        VITE_PUBLIC_PATH: '/',
        VITE_PROXY: [
          [ '/basic-api', 'http://localhost:3000' ],
          [ '/upload', 'http://localhost:3300/upload' ]
        ],
        VITE_DROP_CONSOLE: false,
        VITE_GLOB_API_URL: '/basic-api',
        VITE_GLOB_UPLOAD_URL: '/upload',
        VITE_GLOB_API_URL_PREFIX: '',
        VITE_PORT: 3100,
        VITE_GLOB_APP_TITLE: 'Vben Admin',
        VITE_GLOB_APP_SHORT_NAME: 'vue_vben_admin'
     }
   */

  const { VITE_PORT, VITE_PUBLIC_PATH, VITE_PROXY, VITE_DROP_CONSOLE } = viteEnv;

  // 判断是否为打包命令
  const isBuild = command === 'build';

中间用到的 wrapperEvn 函数分析如下

/**
 * @description 转换从 .env 文件中获取的对象
 * @author wfd
 * @date 2021/10/8 09:30
 * @param envConf
 */
export function wrapperEnv(envConf: Recordable): ViteEnv {
  // 创建一个对象来存储转换的键值
  const ret: any = {};

  /**
   * @description wrapperEnv
   * @author wfd
   * @date 2021/10/8 14:19
   * @example
   * Object.keys(envConf) = [
        'VITE_USE_MOCK',
        'VITE_PUBLIC_PATH',
        'VITE_PROXY',
        'VITE_DROP_CONSOLE',
        'VITE_GLOB_API_URL',
        'VITE_GLOB_UPLOAD_URL',
        'VITE_GLOB_API_URL_PREFIX',
        'VITE_PORT',
        'VITE_GLOB_APP_TITLE',
        'VITE_GLOB_APP_SHORT_NAME'
     ]
   */
  for (const envName of Object.keys(envConf)) {
    /**
     * @description
       realName 是每一个配置对应的 value
       中间的正则替换就是将\\n替换成\n。
       console.log('asda\\\n\\n\n'.replace(/\n/g, '\n')) =>asda\ [回车\n] \n [回车\n]
       console.log('asda\\\n\\n\n'.replace(/\\n/g, '\n'))=>asda\ [回车\n] [回车\n] [回车\n]
       console.log('asda\\\n\\n\n'.replace(/\\\n/g, '\n'))=>asda [回车\n] \n [回车\n]
     */
    let realName = envConf[envName].replace(/\\n/g, '\n');
    // 将 'true' 或者 'false' 的字符串转换为 boolean 对应的 true 或者 false
    realName = realName === 'true' ? true : realName === 'false' ? false : realName;

    // 端口转换成 number 类型
    if (envName === 'VITE_PORT') {
      realName = Number(realName);
    }

    // 将代理配置转换成数组
    if (envName === 'VITE_PROXY' && realName) {
      try {
        realName = JSON.parse(realName.replace(/'/g, '"'));
      } catch (error) {
        realName = '';
      }
    }
    // 将转换后的属性值 realName 赋值给 ret 对应的每一个键
    ret[envName] = realName;

    // 将原始的值也就是未转换的值赋值给 process.env
    if (typeof realName === 'string') {
      process.env[envName] = realName;
    } else if (typeof realName === 'object') {
      process.env[envName] = JSON.stringify(realName);
    }
  }

  return ret;
}
### 集成 Vue3、Vite、Ant Design Vue 和 TypeScript 的解决方案 #### 项目初始化 通过 `npm` 初始化一个新的 Vite 项目,可以选择 Vue 和 TypeScript 支持作为初始配置选项。命令如下: ```bash npm create vite@latest my-project --template vue-ts ``` 这一步会创建一个基础的 Vue3 + TypeScript 项目结构[^2]。 #### 安装 Ant Design Vue 组件库 为了引入 Ant Design Vue 并支持其功能模块化加载,可以安装以下插件并调整项目的依赖项: ```bash npm install ant-design-vue npm install unplugin-vue-components -D ``` 其中,`unplugin-vue-components` 是用于按需加载组件的重要工具,能够显著减少打包体积和提升性能[^4]。 #### 使用 Pinia 替代 Vuex Pinia 是 Vue3 中推荐的状态管理库,相较于传统的 Vuex 更加轻量级且易于维护。可以通过以下方式安装: ```bash npm install pinia ``` 随后,在应用入口文件中注册 Pinia 实例即可完成状态管理的基础设置[^3]。 #### 自定义主题样式 如果需要实现自定义的主题颜色或其他 CSS 变量修改,则可通过 Ant Design Vue 提供的相关文档指导来操作。通常涉及编辑 `.env` 文件或者在 `vite.config.ts` 中指定路径指向用户定义的 LESS/SASS 文件位置[^5]。 #### 推荐模板项目 对于希望快速搭建具备上述技术栈特性的完整后台管理系统而言,“vue-vben-admin”是一个非常优秀的开源示例工程。它不仅涵盖了本文提到的技术要点还包含了更多高级特性如权限控制等实际应用场景下的考量因素。 运行此模板前先克隆仓库到本地再按照常规流程执行必要的环境准备步骤即能体验整个系统的运作情况: ```bash git clone https://github.com/anncwb/vue-vben-admin.git cd vue-vben-admin yarn install yarn serve ``` 以上就是针对您询问有关如何将Vue3,Vite,AntDesignVue以及TypeScript结合起来建立前端开发环境的一个概述说明[^1].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wflynn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值