vue3 build的配置及详解

 更新时间:2025年09月13日 09:25:09   作者:leijmdas  
这篇文章主要介绍了vue3 build的配置,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

vue3 build的配置

Vue 3 项目的构建配置主要集中在 vite.config.js(如果使用 Vite)或 vue.config.js(如果使用 Vue CLI)。

Vite 是目前 Vue 3 官方推荐的构建工具。

下面是一个核心配置项的概览表格,方便你快速了解:

配置类别配置项 (Vite)配置项 (Vue CLI)主要作用与常见值
基础路径basepublicPath部署应用时的基础公共路径。例如:'/my-app/' (子路径部署), './' (相对路径)
输出目录build.outDiroutputDir打包文件的输出目录,默认为 'dist'
静态资源目录build.assetsDirassetsDir放置生成的静态资源 (js, css, img, fonts) 的目录,相对于 outputDir。例如 'assets'
源代码映射build.sourcemapproductionSourceMap是否为生产环境构建生成 source map 文件,便于调试。false 可加速构建并减小输出体积
代码压缩build.minify(通过 configureWebpack)指定生产环境代码压缩工具。Vite 默认使用 'terser',也可设置为 'esbuild'(更快)
文件哈希build.rollupOptions.outputfilenameHashing在输出的文件名中添加哈希值以控制缓存。Vite 通常配置在 rollupOptions.output 中 ,Vue CLI 默认为 true
路径别名resolve.aliaschainWebpack 或 configureWebpack创建模块导入的别名,简化路径。例如 '@': path.resolve(__dirname, 'src')
开发服务器serverdevServer配置开发服务器行为,如端口、代理等
CSS 相关csscss配置 CSS 预处理器、模块化、提取行为等
环境变量.env.[mode] 文件.env.[mode] 文件根据不同环境(开发、生产、测试)设置变量。Vite 中通过 import.meta.env 访问

Vite 项目详细配置 (vite.config.js)

Vite 是 Vue 3 官方推荐的构建工具,提供更快的开发服务器启动和热更新 。

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
 
export default defineConfig({
  plugins: [vue()], // 使用 Vue 插件
  base: './', // 部署应用时的基本 URL。默认是 '/',如果部署到子路径,需要修改 [3](@ref)
  resolve: {
    alias: {
      '@': path.resolve(__dirname, 'src'), // 设置路径别名,简化导入 [4,5](@ref)
    },
  },
  server: {
    host: '0.0.0.0', // 指定服务器应该监听哪个 IP 地址
    port: 3000, // 指定开发服务器端口 [4](@ref)
    open: true, // 在服务器启动时自动打开浏览器 [4](@ref)
    proxy: { // 配置自定义代理规则 [4](@ref)
      '/api': {
        target: 'http://your-api-server.com',
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, ''),
      },
    },
  },
  build: {
    outDir: 'dist', // 打包输出目录 [3](@ref)
    assetsDir: 'assets', // 静态资源存放目录 [3](@ref)
    sourcemap: false, // 是否生成 sourcemap 文件,生产环境建议关闭以减小体积 [4](@ref)
    minify: 'terser', // 代码压缩工具,可选 'terser' 或 'esbuild',默认为 'esbuild' [5](@ref)
    terserOptions: { // 传递给 Terser 的更多 minify 选项 [6](@ref)
      compress: {
        drop_console: true, // 移除 console
        drop_debugger: true, // 移除 debugger
      },
    },
    rollupOptions: { // 自定义底层的 Rollup 打包配置 [4](@ref)
      output: {
        chunkFileNames: 'js/[name]-[hash].js', // 代码分割后的 chunk 文件命名
        entryFileNames: 'js/[name]-[hash].js', // 入口文件命名
        assetFileNames: '[ext]/[name]-[hash].[ext]', // 静态资源文件命名(如字体、图片)[5](@ref)
      },
    },
  },
  css: {
    preprocessorOptions: { // CSS 预处理器相关配置 [4](@ref)
      scss: {
        additionalData: `@import "@/styles/variables.scss";`, // 全局注入 SCSS 变量或 mixin
      },
    },
  },
})

Vue CLI 项目详细配置 (vue.config.js)

Vue CLI 也是一个常用的工具,可以简化 Vue 项目的配置和打包过程 。

const { defineConfig } = require('@vue/cli-service')
const path = require('path')
 
module.exports = defineConfig({
  transpileDependencies: true, // 如果需要 Babel 显式转译某些依赖,可以在此列出
  publicPath: process.env.NODE_ENV === 'production' ? '/my-app/' : '/', // 部署应用包时的基本 URL,类似于 Vite 的 base [8](@ref)
  outputDir: 'dist', // 构建文件输出目录 [9](@ref)
  assetsDir: 'static', // 放置生成的静态资源的目录 [9](@ref)
  indexPath: 'index.html', // 指定生成的 index.html 的输出路径 [9](@ref)
  filenameHashing: true, // 静态资源文件名是否包含 hash 以控制缓存 [9](@ref)
  productionSourceMap: false, // 生产环境是否生成 source map,关闭可加速构建 [8](@ref)
  configureWebpack: { // 简单调整 Webpack 配置,会合并到最终配置 [10](@ref)
    resolve: {
      alias: {
        '@': path.resolve(__dirname, 'src'),
      },
    },
  },
  chainWebpack: (config) => { // 基于 webpack-chain 的链式操作,用于更细粒度的控制 [10](@ref)
    if (process.env.NODE_ENV === 'production') {
      config.optimization.minimizer('terser').tap((args) => {
        args[0].terserOptions.compress.drop_console = true
        return args
      })
    }
  },
  devServer: {
    port: 8080, // 开发服务器端口 [8](@ref)
    open: true, // 启动后是否打开浏览器 [8](@ref)
    proxy: { // 代理配置,解决开发环境跨域 [8](@ref)
      '/api': {
        target: 'http://localhost:3000',
        changeOrigin: true,
        pathRewrite: {
          '^/api': '',
        },
      },
    },
  },
})

环境变量配置

Vue 3 项目通常使用环境变量来管理不同环境(开发、测试、生产)的配置 。

创建环境文件:在项目根目录创建 .env.development (开发环境)、.env.production (生产环境)、.env.test (测试环境) 等文件 。

定义变量:在环境文件中,以 VITE_ 开头定义变量(Vite 项目) 或 VUE_APP_ 开头(Vue CLI 项目)。

  • Vite 项目环境文件示例 (.env.production):
VITE_APP_TITLE=我的应用
VITE_API_BASE_URL=https://api.example.com
  • Vue CLI 项目环境文件示例:
VUE_APP_TITLE=我的应用
VUE_APP_API_BASE_URL=https://api.example.com

访问变量

  • Vite 项目中,通过 import.meta.env.VITE_变量名 访问 。
  • Vue CLI 项目中,通过 process.env.VUE_APP_变量名 访问。

常用构建命令

package.jsonscripts 中通常会定义这些命令:

  • 开发环境npm run dev (Vite) 或 npm run serve (Vue CLI) - 启动开发服务器 。
  • 生产构建npm run build - 构建生产环境用的包,输出到 dist 目录 。
  • 预览构建结果npm run preview (Vite) - 本地预览构建后的生产包。

可选:配置分析和优化

  • 打包分析:可以使用 rollup-plugin-visualizer 等插件分析构建产物,优化体积 。
  • 代码分割:通过动态导入 (import()) 和配置 build.rollupOptions.output.manualChunks (Vite) 或 configureWebpack.optimization.splitChunks (Vue CLI) 来优化代码分割和懒加载 。
  • 兼容旧浏览器:使用 @vitejs/plugin-legacy (Vite) 或相应的 Babel 配置 (Vue CLI) 为生产构建提供传统浏览器兼容性 。

总结

希望这些信息能帮助你配置和优化你的 Vue 3 项目构建!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue中状态管理器Pinia的用法详解

    vue中状态管理器Pinia的用法详解

    Pinia 是 Vue.js 的轻量级状态管理库,最近很受欢迎,它使用 Vue 3 中的新反应系统来构建一个直观且完全类型化的状态管理库,下面就跟随小编一起来学习一下它的具体使用吧
    2023-10-10
  • Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)

    Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)

    组件(Component)是 Vue.js 最强大的功能之一。接下来给大家介绍vuejs单向绑定、双向绑定、列表渲染、响应函数的相关知识,非常不错,感兴趣的朋友一起看看吧
    2016-09-09
  • 基于Vue实现封装一个虚拟列表组件

    基于Vue实现封装一个虚拟列表组件

    正常情况下,我们对于数据都会分页加载,最近项目中确实遇到了不能分页的场景,如果不分页,页面渲染几千条数据就会感知到卡顿,使用虚拟列表就势在必行了。本文主要介绍了如何基于Vue实现封装一个虚拟列表组件,感兴趣的可以了解一下
    2023-03-03
  • Vue列表渲染的示例代码

    Vue列表渲染的示例代码

    这篇文章主要介绍了Vue列表渲染的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • Vue.js如何使用Socket.IO的示例代码

    Vue.js如何使用Socket.IO的示例代码

    这篇文章主要介绍了Vue.js如何使用Socket.IO的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • vue如何监听元素横向滚动到最右侧

    vue如何监听元素横向滚动到最右侧

    这篇文章主要介绍了vue如何监听元素横向滚动到最右侧问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • 详解利用jsx写vue组件的方法示例

    详解利用jsx写vue组件的方法示例

    这篇文章主要给大家介绍了关于利用jsx写vue组件的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编来一起看看吧。
    2017-07-07
  • Vuex的四个常用核心概念解读

    Vuex的四个常用核心概念解读

    本文详细解析了Vuex中的四个核心概念及其区别,包括State用于存储状态,Getters用于计算属性并缓存,Mutations是唯一更改State的同步方法,Actions则用于提交Mutations且支持异步操作
    2024-11-11
  • Vue实现导航栏的显示开关控制

    Vue实现导航栏的显示开关控制

    今天小编就为大家分享一篇Vue实现导航栏的显示开关控制,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Vue实现当前页面刷新的4种方法举例

    Vue实现当前页面刷新的4种方法举例

    我们在开发vue的页面的时候,有时候会遇到需要刷新当前页面功能,但是vue框架自带的router是不支持刷新当前页面功能,下面这篇文章主要给大家介绍了关于Vue实现当前页面刷新的4种方法,需要的朋友可以参考下
    2023-04-04

最新评论