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'],
  

});


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值