Vue3+ElementPlus的常用Vite配置

1. 导入模块

import { fileURLToPath, URL } from "node:url";
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import AutoImport from "unplugin-auto-import/vite";
import Components from "unplugin-vue-components/vite";
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";
  • fileURLToPathURL:用于处理文件路径。
  • defineConfig:Vite 提供的函数,用于定义配置。
  • @vitejs/plugin-vue:支持 Vue 3 的插件。
  • unplugin-auto-import:自动导入 API 的插件,减少手动导入的工作。
  • unplugin-vue-components:自动注册 Vue 组件的插件。
  • ElementPlusResolver:用于自动导入 Element Plus 组件的解析器。

2. Vite 配置

export default defineConfig({
  plugins: [
    vue(),
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [ElementPlusResolver()],
    }),
  ],
  • plugins:配置使用的插件。
    • vue():启用 Vue 支持。
    • AutoImport:配置自动导入,使用 Element Plus 组件。
    • Components:配置自动注册组件,同样使用 Element Plus 解析器。

3. 解析配置

  resolve: {
    alias: {
      "@": fileURLToPath(new URL("./src", import.meta.url)),
    },
    extensions: ['.mjs', '.js', '.mts', '.ts', ".json"],
  },
  • alias:设置路径别名,@ 指向 src 目录,方便引用。
  • extensions:指定可以省略后缀的文件类型。

4. 环境变量定义

  define: {
    "process.env.NODE_ENV": JSON.stringify(process.env.NODE_ENV),
  },
  • define:用于定义全局常量,这里定义了 process.env.NODE_ENV,以便在代码中使用。

5. 开发服务器配置

  server: {
    port: 5173,
    strictPort: false,
    open: true,
    cors: true,
    hmr: {
      protocol: 'ws',
      port: 3001,
      host: 'localhost',
    },
    proxy: {
      "/api": {
        target: "http://localhost:5000",
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, ""),
      },
    },
  },
  • port:开发服务器运行的端口。
  • strictPort:如果端口被占用,是否严格报错。
  • open:启动后自动打开浏览器。
  • cors:启用 CORS 支持。
  • hmr:热模块替换配置,指定协议、端口和主机名。
  • proxy:设置代理,将 /api 的请求转发到 http://localhost:5000,并重写路径。

6. 构建配置

  build: {
    outDir: "dist",
    sourcemap: true,
    emptyOutDir: true,
    assetsDir: "assets",
    cssCodeSplit: true,
    minify: "terser",
    chunkSizeWarningLimit: 500,
    rollupOptions: {
      input: "./index.html",
      output: {},
      plugins: [],
    },
  },
  • outDir:构建输出目录。
  • sourcemap:生成源映射文件,方便调试。
  • emptyOutDir:构建前清空输出目录。
  • assetsDir:静态资源目录。
  • cssCodeSplit:启用 CSS 代码分割。
  • minify:使用 Terser 进行代码压缩。
  • chunkSizeWarningLimit:设置 chunk 大小警告限制。
  • rollupOptions:Rollup 的配置选项,指定入口文件和输出选项。

7. CSS 预处理器选项

  css: {
    preprocessorOptions: {
      scss: {
        additionalData: `@import "./src/styles/variables.scss";`,
      },
    },
  },
  • preprocessorOptions:配置 CSS 预处理器,这里为 SCSS 添加全局变量文件的导入。

8. 依赖优化配置

  optimizeDeps: {
    include: [],
    exclude: [],
  },
  • optimizeDeps:优化依赖的配置,可以指定需要包含或排除的依赖。

9. JSON 导入配置

  json: {
    namedExports: true,
  },
  • json:配置 JSON 文件的导入方式,启用命名导出。

10. 公共目录和资产包含

  publicDir: 'public',
  assetsInclude: ['.svg', '.png', '.jpg'],
});
  • publicDir:指定公共资源目录,Vite 会将该目录下的文件直接复制到输出目录。
  • assetsInclude:指定需要包含的资产文件类型。
    好的,我们可以进一步深入探讨这个 Vite 配置文件的各个部分,以及如何根据项目需求进行调整和优化。

11. 插件的使用和配置

AutoImport 和 Components 插件

这两个插件通过 ElementPlusResolver 提供了对 Element Plus 组件库的支持。它们的主要作用是:

  • AutoImport:自动导入常用 API,比如 Vue 的 refreactive 等,减少手动导入的工作量。
  • Components:自动注册 Element Plus 组件,开发者无需在每个文件中手动导入和注册组件,提升开发效率。
自定义插件

rollupOptions.plugins 中,你可以添加自定义的 Rollup 插件,以满足特定的构建需求。例如,添加压缩、图像优化、代码分割等功能。

12. 开发服务器的扩展

HMR 配置

热模块替换(HMR)是一个非常重要的功能,能够在不刷新整个页面的情况下更新模块。这里的配置允许你自定义 HMR 的协议、端口和主机名,适应不同的开发环境。

代理设置

代理配置可以帮助你在开发环境中解决跨域问题。你可以根据需要添加更多的代理路径,例如 /auth/assets 等,确保后端 API 的请求能够顺利转发。

13. 构建优化

输出目录和文件名

你可以根据项目需求自定义输出目录和文件名。例如,使用哈希值来命名文件,以便于缓存控制:

output: {
  entryFileNames: '[name].[hash].js',
  chunkFileNames: '[name].[hash].js',
  assetFileNames: '[name].[hash][extname]',
}
代码分割

通过设置 cssCodeSplit 和合理的 chunkSizeWarningLimit,你可以优化应用的加载性能,确保用户在访问时获得更快的体验。

14. CSS 预处理器的灵活性

SCSS 配置

scssadditionalData 中,你可以引入全局样式、变量和 mixins。这使得在项目中的任意 SCSS 文件中都可以直接使用这些全局样式,而无需在每个文件中重复导入。

15. 依赖优化

优化依赖的包含和排除

optimizeDeps 中,你可以手动控制哪些依赖需要预构建,哪些依赖需要排除。这在处理大型项目时,可以有效减少构建时间。

16. JSON 导入的灵活性

命名导出

启用 namedExports 选项后,你可以像导入模块一样导入 JSON 文件中的特定字段,这使得数据的使用更加灵活和直观。

17. 公共资源的管理

publicDir

指定的 publicDir 目录中的文件会在构建时直接复制到输出目录。这对于存放静态文件(如图片、字体等)非常有用,开发者可以直接引用这些文件。

18. 资产类型的支持

assetsInclude

通过设置 assetsInclude,你可以指定哪些类型的文件(如 .svg.png.jpg)被视为资产。这在处理图像文件时非常重要,确保这些文件能够被正确处理和引入。

最终配置

import { fileURLToPath, URL } from "node:url";
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import AutoImport from "unplugin-auto-import/vite";
import Components from "unplugin-vue-components/vite";
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [ElementPlusResolver()],
    }),
  ],
  resolve: {
    alias: {
      "@": fileURLToPath(new URL("./src", import.meta.url)),
    },
    extensions: ['.mjs', '.js', '.mts', '.ts', ".json"],
  },
  define: {
    "process.env.NODE_ENV": JSON.stringify(process.env.NODE_ENV),
  },
  server: {
    // host: "0.0.0.0",
    port: 5173,
    strictPort: false,
    open: true,
    cors: true,
    // hmr: {
    //   protocol: 'ws',
    //   port: 3001,
    //   host: 'localhost', // 指定 HMR 主机名
    // },
    // fs: {
    //   allow: ['./src'], // 允许访问 src 文件夹
    // },
    // middlewareMode: true,
    proxy: {
      "/api": {
        target: "http://localhost:5000",
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, ""),
      },
      // '/auth': {
      //   target: 'http://localhost:6000',
      //   changeOrigin: true,
      //   rewrite: (path) => path.replace(/^\/auth/, ''),
      // },
      // '/assets': {
      //   target: 'http://localhost:7000',
      //   changeOrigin: true,
      //   rewrite: (path) => path.replace(/^\/assets/, ''),
      // },
    },
  },
  build: {
    outDir: "dist",
    sourcemap: true,
    emptyOutDir: true,
    assetsDir: "assets",
    cssCodeSplit: true,
    minify: "terser",
    chunkSizeWarningLimit: 500,
    rollupOptions: {
      input: "./index.html",
      output: {
        // 自定义输出选项
      },
      // 可以添加自定义插件
      plugins: [
        // 例如,添加一些 Rollup 插件
      ],
    },
  },
  css: {
    preprocessorOptions: {
      scss: {
        additionalData: `@import "./src/styles/variables.scss";`,
      },
    },
  },
  optimizeDeps: {
    include: [],
    exclude: [],
  },

  json: {
    // import { name } from './data.json';
    // console.log(name); // 输出: John Doe
    namedExports: true, // 启用命名导出
  },
  publicDir: 'public',
  assetsInclude: ['.svg', '.png', '.jpg'],
  

});


对于搭建 Vue 3 + TypeScript + Vite + Element Plus 的环境,并进行 Vite 的优化,可以按照以下步骤进行操作: 1. 确保已安装 Node.js 首先确保你的电脑已经安装了 Node.js,可以在命令行中输入 `node -v` 来检查是否安装成功。 2. 创建新项目 打开命令行,进入到你想要创建项目的目录中,执行以下命令创建新的 Vue 3 项目: ``` npm init @vitejs/app my-vue-app --template vue-ts ``` 3. 安装 Element Plus 进入到项目目录,执行以下命令安装 Element Plus: ``` npm install element-plus --save ``` 4. 配置 Element Plus 在 `src/main.ts` 中引入 Element Plus 的样式和组件: ```typescript import { createApp } from 'vue'; import App from './App.vue'; import elementPlus from 'element-plus'; import 'element-plus/lib/theme-chalk/index.css'; const app = createApp(App); app.use(elementPlus); app.mount('#app'); ``` 5. Vite 的优化 Vite 是一个基于 ES Modules 的构建工具,它的特点是快速的冷启动和开发时的实时模块热更新。但在生产环境中,我们需要对 Vite 进行一些优化。 - 使用生产模式构建 在 `package.json` 文件中的 `scripts` 中添加以下命令: ```json "scripts": { "build": "vite build" } ``` 然后执行 `npm run build` 命令进行构建。 - 优化打包体积 在 `vite.config.ts` 中可以配置一些优化选项,例如: ```typescript import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' export default defineConfig({ plugins: [vue()], build: { target: 'es2015', terserOptions: { compress: { drop_console: true, drop_debugger: true } } } }) ``` 上述配置中,`target` 指定了构建的目标浏览器环境为 ES2015,`terserOptions` 中的配置会在压缩代码时移除控制台输出和调试器。 - 配置静态资源路径 默认情况下,Vite 会将静态资源放在根目录下,可以通过配置 `base` 选项来指定静态资源的路径。在 `vite.config.ts` 中添加以下配置: ```typescript export default defineConfig({ base: '/your-base-path/' }) ``` - 优化生产环境加载速度 在生产环境中,可以通过配置 `build.assetsInlineLimit` 来控制是否将小于指定大小的文件转换为 base64 格式内联到 HTML 中。在 `vite.config.ts` 中添加以下配置: ```typescript export default defineConfig({ build: { assetsInlineLimit: 4096 } }) ``` 这些只是一些常用的优化选项,你可以根据具体需求进行配置。 希望以上步骤对你有所帮助!如果你有更多问题,可以继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值