当前位置: 首页 > news >正文

理解vue-cli中的webpack

🌱 什么是 Vue CLI?

Vue CLI(Command Line Interface) 是 Vue.js 官方提供的项目构建工具,可以快速构建标准化的 Vue 项目结构,内置开发服务器、热更新、构建优化、插件系统等功能。

特点

  • ✅ 快速搭建项目结构
  • ✅ 内置开发服务器(基于 webpack-dev-server)
  • ✅ 开箱即用的构建配置(Webpack、Babel、PostCSS 等)
  • ✅ 插件式架构,灵活扩展
  • ✅ GUI 图形界面(vue ui)

🔧 安装与初始化项目

安装 Vue CLI

npm install -g @vue/cli

yarn global add @vue/cli

安装成功后可用命令:

vue --version

创建新项目

vue create my-project

你将看到交互提示:

  • 手动选择功能(如 Babel, Router, Vuex, CSS 预处理器等)
  • 选择 Vue 版本(2 或 3)
  • 保存为预设配置

启动开发服务器

cd my-project
npm run serve

默认运行在 http://localhost:8080

🧱 项目结构说明

my-project/
├── public/                  # 静态资源,index.html 模板在此
├── src/
│   ├── assets/              # 静态资源
│   ├── components/          # Vue 组件
│   ├── views/               # 页面视图(通常配合 Vue Router)
│   ├── App.vue              # 根组件
│   ├── main.js              # 入口文件
├── package.json             # 项目信息和依赖
├── babel.config.js          # Babel 配置
└── vue.config.js            # CLI 配置文件(可选)

Vue CLI 中的 Webpack

🌐 Vue CLI 中的 Webpack 是如何工作的?

Vue CLI 使用 Webpack 作为构建工具的核心引擎,但它通过封装和插件化,让开发者不需要手动编写繁杂的 webpack.config.js,而是通过插件和配置项间接控制 Webpack 行为。

默认集成:

创建项目时,Vue CLI 自动为你配置:
• Babel(通过 babel-loader)
• CSS 预处理器
• .vue 文件处理(vue-loader)
• Dev Server 热更新(webpack-dev-server)
• 文件资源(file-loader, url-loader)
• 懒加载支持(splitChunks)
• Hash 命名和 Tree-shaking 优化

🛠 方式一:通过 vue.config.js 覆盖 Webpack 配置

vue.config.js 是 Vue CLI 提供的配置文件,用于修改 Webpack 配置,支持三种方式:

✅ 简单配置方式

// vue.config.js
module.exports = {outputDir: 'dist',assetsDir: 'static',lintOnSave: true,productionSourceMap: false
}

✅ 通过 configureWebpack 修改配置

适合简单合并 Webpack 配置:

module.exports = {configureWebpack: {resolve: {alias: {'@img': '@/assets/images'}},externals: {vue: 'Vue'}}
}

✅ 通过 chainWebpack 使用 webpack-chain 精细控制

适合复杂修改(推荐方式):

module.exports = {chainWebpack: config => {// 删除预加载config.plugins.delete('preload')config.plugins.delete('prefetch')// 添加别名config.resolve.alias.set('@components', '@/components')// 修改 loader 选项config.module.rule('vue').use('vue-loader').tap(options => {options.compilerOptions.whitespace = 'preserve'return options})}
}

🔍 常见 Webpack 配置项详解

alias(别名)

config.resolve.alias.set('@utils', path.resolve(__dirname, 'src/utils'))

externals(防止打包外部库)

configureWebpack: {externals: {vue: 'Vue',axios: 'axios'}
}

然后你需要手动引入 CDN:

<script src="https://cdn.jsdelivr.net/npm/vue@2"></script>

修改 CSS 相关 Loader

module.exports = {chainWebpack: config => {config.module.rule('scss').oneOf('vue').use('sass-loader').tap(options => {options.additionalData = `@import "@/styles/variables.scss";`return options})}
}

SVG 精细处理

chainWebpack: config => {const svgRule = config.module.rule('svg')svgRule.uses.clear()svgRule.use('svg-sprite-loader').loader('svg-sprite-loader').options({symbolId: 'icon-[name]'})
}

📦自定义 Loader & Plugin 示例

添加自定义 Loader

chainWebpack: config => {config.module.rule('txt').test(/\.txt$/).use('raw-loader').loader('raw-loader')
}

添加自定义 Plugin

const WebpackBar = require('webpackbar')configureWebpack: {plugins: [new WebpackBar()]
}

🧬查看 Webpack 最终配置的方法

使用 CLI 命令:

vue inspect > output.js

会将完整的 Webpack 配置导出到 output.js 中,非常适合调试和学习。

你也可以直接打印部分信息:

vue inspect --rules
vue inspect --plugins

🚀 构建优化相关 Webpack 方法

代码分包(Code Splitting)

Vue Router 支持懒加载:

const Home = () => import('@/views/Home.vue')

自动被打包为独立 chunk。

分离 vendor 和 runtime(优化缓存)

configureWebpack: {optimization: {splitChunks: {chunks: 'all'},runtimeChunk: 'single'}
}

关闭生产环境 source map

productionSourceMap: false

可减少打包体积和防止源码泄露。

🧭 Vue CLI 中 Webpack 的使用方法对比表

方法功能适用场景
vue.config.js 常规配置快速调整路径、端口、map 等基础修改
configureWebpack合并对象,简单增强添加插件、externals 等
chainWebpack精细修改、链式调用修改 loader、plugin、规则顺序等
vue inspect查看实际配置调试或学习
自定义 plugin / loader注入复杂逻辑特殊构建需求

相关文章:

  • RabbitMQ搭建集群
  • kafka SASL/PLAIN 认证及 ACL 权限控制
  • Python整合Milvus向量数据库案例实战
  • 【Opencv+Yolo】Day2_图像处理
  • 探索C++标准模板库(STL):从容器到底层奥秘-全面解析String类高效技巧(上篇)
  • 在RK3588上实现YOLOv8n高效推理:从模型优化到GPU加速后处理全解析
  • element-ui upload 组件源码分享
  • C语言数据存储
  • 【b站计算机拓荒者】【2025】微信小程序开发教程 - chapter3 项目实践 - 2信息采集
  • Python打卡训练营打卡记录day38
  • 科技趋势分析系统 BBC (Big Bang of Computing)
  • 大模型(4)——Agent(基于大型语言模型的智能代理)
  • MYSQL 学习笔记
  • 解决ubuntu服务器未使用空间的分配
  • VUE npm ERR! code ERESOLVE, npm ERR! ERESOLVE could not resolve, 错误有效解决
  • 【OS安装与使用】part7-ubuntu22.04LTS 的 docker 安装与使用(实例:MTransServer服务部署)
  • GitHub 趋势日报 (2025年05月26日)
  • IDEA使用Git进行commit提交到本地git空间后撤回到commit版本之前
  • 新增 git submodule 子模块
  • 爬虫入门指南-某专利网站的专利数据查询并存储
  • 网站进行规划与设计/网站seo推广优化
  • 网站海外推广建设/软文营销代理
  • 外贸是先做网站还是做阿里巴巴/搜索引擎关键词竞价排名
  • 苍南龙港做网站店铺/企拓客app骗局
  • 用v9做的网站上传服务器/四川网络推广seo
  • 长沙做网站好的公司/广州引流推广公司