解析vue.config.js文件

一、用途

创建 Vue 项目时,默认情况下是没有 vue.config.js 文件的。Vue CLI 会提供一组默认的配置,用于构建和开发项目,这些配置在内部被封装好了,并不需要用户手动创建 vue.config.js 文件来进行配置。通过在项目根目录下创建 vue.config.js 文件,你可以自定义 Vue CLI 的默认配置,从而满足项目特定的需求。

一些常见的用途包括:

1、自定义 webpack 配置:

  • 可以通过 vue.config.js 文件来修改 Vue CLI 默认的 webpack 配置,例如添加额外的 loader 或 plugin、调整 webpack 的 entry、output 等选项。

2、配置开发服务器:

  • 在 vue.config.js 中配置开发服务器的选项,例如端口号、代理设置、HTTPS 配置等。

3、配置公共资源路径:

  • 可以指定构建后静态资源的公共路径,比如部署到子路径或 CDN 上时的路径设置。

4、配置环境变量:

  • 可以在 vue.config.js 中设置环境变量,用于在项目中访问和区分不同的环境,比如开发环境、测试环境和生产环境。

5、配置插件:

  • 可以配置 Vue CLI 插件,通过在 vue.config.js 文件中进行相应的设置和调整。

6、配置CSS:

  • 可以配置 CSS 相关的选项,例如启用 CSS modules、使用 PostCSS 插件等。

7、配置Babel:

  • 可以配置 Babel 相关的选项,例如添加额外的 Babel 插件或预设。

二、常见的配置项及其功能说明

module.exports = {// 配置开发服务器devServer: {// 指定开发服务器的主机名,默认为 localhosthost: 'localhost',// 指定开发服务器的端口号,默认为 8080port: 8080,// 启用 HTTPS,默认为 falsehttps: false,// 配置开发服务器的代理proxy: {'/api': {target: 'http://localhost:3000',changeOrigin: true,pathRewrite: {'^/api': ''}}}},// 配置公共路径publicPath: '/',// 是否在构建时生成 source map,默认为 falseproductionSourceMap: false,// 配置 CSScss: {// 启用 CSS modulesrequireModuleExtension: true,// 是否使用 CSS 预处理器 loaderloaderOptions: {sass: {prependData: `@import "@/styles/variables.scss";`}}},// 配置 BabeltranspileDependencies: [/* string or regex */],// 配置插件pluginOptions: {// ...},// 配置 webpackconfigureWebpack: {// ...},// 配置 Webpack Dev Server 的选项devServer: {// ...}
};

三、实践案例

'use strict'
const path = require('path')
// 辅助函数 resolve,它接受一个路径参数 dir,并返回该路径相对于当前文件所在目录的绝对路径
function resolve (dir) {return path.join(__dirname, dir)
}
// 引入了用于压缩文件的 webpack 插件 compression-webpack-plugin,它能够在打包时对文件进行 gzip 压缩
const CompressionWebpackPlugin = require('compression-webpack-plugin')
// 定义了一个变量 IS_PROD,它根据当前环境变量 NODE_ENV 的值来判断是否为生产环境
const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV)
// 正则表达式,用于匹配需要进行 gzip 压缩的文件类型
const productionGzipExtensions = /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i
// 导出了整个配置对象,使其可以被 webpack 使用
module.exports = {publicPath: './',outputDir: 'dist',assetsDir: 'static',lintOnSave: process.env.NODE_ENV === 'development',productionSourceMap: false,css: {loaderOptions: {// 给 sass-loader 传递选项sass: {// 所以这里假设你有 `src/variables.scss` 这个文件data: '@import "@/assets/css/variables.scss";'}}},configureWebpack: config => {// 定义一个空数组,用于存放Webpack插件const plugins = []// 如果是生产环境,添加以下插件配置if (IS_PROD) {plugins.push(new CompressionWebpackPlugin({ // 使用CompressionWebpackPlugin插件进行gzip压缩filename: '[path].gz[query]', // 指定压缩后文件的名称格式algorithm: 'gzip', // 指定压缩算法为gziptest: productionGzipExtensions, // 指定要压缩的文件类型threshold: 10240, // 只有文件大小大于10KB才会被压缩minRatio: 0.8 // 只有压缩率达到0.8以上的文件才会被压缩}))// 开启分离js,配置Webpack的优化选项config.optimization = {runtimeChunk: 'single', // 将runtime代码单独提取为一个chunksplitChunks: { // 配置分割代码块的规则chunks: 'all', // 选择所有类型的chunk进行优化maxInitialRequests: Infinity, // 允许的最大初始请求数,Infinity表示无限制minSize: 20000, // 每个代码块的最小大小,小于该值的模块不会被提取cacheGroups: { // 定义缓存组vendor: { // 缓存组的名称为vendortest: /[\\/]node_modules[\\/]/,  // 匹配条件,node_modules目录下的模块name (module) { // 模块名称的生成规则const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1] // 获取模块名称return `npm.${packageName.replace('@', '')}` // 返回以npm.开头的模块名称,@符号替换为空字符串}}}}};}// 将定义的插件数组合并到Webpack配置中的插件数组中config.plugins = [...config.plugins, ...plugins];},chainWebpack (config) {// 删除 webpack 中的预加载和预获取资源的插件// 这些插件通常会在项目中引入一些未使用的资源,对于一些性能要求较高的项目,可能希望移除这些插件以减少无用资源的加载。config.plugins.delete('preload') // TODO: need testconfig.plugins.delete('prefetch') // TODO: need test// 将入口文件配置为包含了 Babel polyfill 的 main.js 文件config.entry.app = ['@babel/polyfill', './src/main.js']// 设置了一个别名 @,指向项目中的 src 目录// 在代码中引用文件时就可以使用 @ 代替 srcconfig.resolve.alias.set('@', resolve('src')).end()// 如果是开发环境,则调用 config.devtool('cheap-source-map') 方法来配置 devtool 选项,以生成方便调试的源映射文件config.when(process.env.NODE_ENV === 'development',config => config.devtool('cheap-source-map'))// 图片处理规则config.module.rule('images').test(/\.(woff2?|eot|ttf|otf|png|jpe?g|gif|svg)(\?.*)?$/) // 匹配图片文件的文件名后缀.use('url-loader') // 使用 url-loader 加载器处理图片文件.loader('url-loader').options({limit: 80000, // 小于 80000 字节的图片转换为 base64 编码的 Data URLesModule: false // 禁用 ES 模块语法})if (IS_PROD) {config.module.rule('images').test(/\.(woff2?|eot|ttf|otf|png|jpe?g|gif|svg)(\?.*)?$/).use('image-webpack-loader') // 用于优化图片文件.loader('image-webpack-loader').options({mozjpeg: { progressive: true, quality: 65 },optipng: { enabled: false },pngquant: { quality: [0.65, 0.9], speed: 4 },gifsicle: { interlaced: false }})}}
}

以上代码的主要作用是根据环境判断是否为生产环境,如果是则添加对应的插件配置和优化选项。其中,主要的插件是 CompressionWebpackPlugin,用于对资源文件进行 gzip 压缩,在生产环境中提高加载速度。同时,通过配置 splitChunks 选项,将第三方库和公共模块分离到单独的文件中,以优化浏览器缓存机制,提高页面加载速度

附:

其中一些关键配置项解析

  1. publicPath: 指定项目的基本 URL 路径,通常用于将静态资源部署到 CDN 上时使用。在这个配置中,‘./’ 表示相对路径。
  2. outputDir: 指定打包后的文件输出目录。
  3. assetsDir: 指定放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录。
  4. productionSourceMap: 是否在生产环境下生成 source map 文件,方便调试,默认为 false。
  5. css.loaderOptions: 用于向 CSS 相关的 loader 传递选项。在这里使用 sass-loader 加载器,引入了一个变量文件。
  6. configureWebpack: 用于修改 webpack 的配置,在这里添加了一些插件,比如压缩插件 CompressionWebpackPlugin,根据环境变量决定是否启用压缩。
  7. chainWebpack: 通过 webpack-chain 的 API 修改 webpack 配置,包括修改入口文件、配置别名、删除预加载和预取等操作。
  8. url-loaderimage-webpack-loader: 用于处理图片资源,限制图片大小,并进行图片优化,例如压缩、转换格式等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/4885.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重生奇迹MU首饰属性之迷

雷:抵抗移位、掌心雷 冰:抵抗冰度冻、冰封问箭、暴风雪、冰封 毒:降低中毒几率(中毒不掉血)、毒咒、毒炎 风:抵抗移位旋风斩(没试过不过很多人用)、龙卷风 至于火水地因为并没有…

分布式与一致性协议之Paxos算法(三)

Paxos算法 兰伯特关于Multi-Paxos的思考 领导者 我们可以通过引入领导者(Leader)节点来解决第一个问题。也就是说将领导者节点作为唯一提议者,如图所示。这样就不存在多个提议者同时提交提案的情况,也就不存在提案冲突的情况了。这里补充一点:在论文中…

NAT网络地址转换实验(思科)

华为设备参考:NAT网络地址转换实验(华为) 一,技术简介 NAT(Network Address Translation),即网络地址转换技术,是一种在现代计算机网络中广泛应用的技术,主要用于有效管…

游戏新手村23:游戏数据分析都是谁在看数据

不管是做端游页游还是手游,不管是做市场广告投放还是游戏运营,都需要看数据。有的人说“数据会说话”,也有人说“数据会说谎”,有的人言必谈大数据,有的人则能善于从细小的数据着手发现问题。 我知道和了解的一些游戏…

react怎么只让接口请求一次

在React中,确保接口只请求一次通常涉及到组件的生命周期和状态管理。以下是一些常用的策略: 使用组件的useEffect钩子(函数组件): 如果你使用的是函数组件,你可以使用useEffect钩子来发起请求,并确保它只在…

SpringBoot - java.lang.NoClassDefFoundError: XXX

问题描述 以 json-path 为例:java.lang.NoClassDefFoundError: com/jayway/jsonpath/Configuration 原因分析 编译不报错,但是运行时报错。 遇到这样类似的问题,首先就要想到是不是 Jar 包冲突引起的,或者引入的不是理想的 Jar…

数据仓库实验二:关联规则挖掘实验

目录 一、实验目的二、实验内容和要求三、实验步骤1、创建数据库和表2、挖掘关联规则(1)新建一个 Analysis Services 项目 Sales(2)建立数据源视图(3)建立挖掘结构 Sales.dmm(4)部署…

Java集合相关的List、Set、Map基础知识

目录 一、集合介绍 二、List 三、Map HashMap的数据结构 如何理解红黑树 四、set 一、集合介绍 在Java中,集合是一种用于存储对象的数据结构,它提供了一种更加灵活和强大的方式来处理和操作数据。Java集合框架提供了一系列接口和类,用…

Pointnet++改进即插即用系列:全网首发PPA反向残差移动块 |即插即用,提升特征提取模块性能

简介:1.该教程提供大量的首发改进的方式,降低上手难度,多种结构改进,助力寻找创新点!2.本篇文章对Pointnet++特征提取模块进行改进,加入PPA,提升性能。3.专栏持续更新,紧随最新的研究内容。 目录 1.理论介绍 2.修改步骤 2.1 步骤一 2.2 步骤二 2.3 步骤三

Transformer模型详解01-Word Embedding

文章目录 前言Transformer 整体结构Transformer 的输入单词 Embedding原理CBOW 模型one-hot构建 CBOW 训练数据集构建 CBOW 神经网络训练 CBOW 神经网络 Skip-gram 模型one-hot构建 Skip-gram训练数据集训练 Skip-gram神经网络 Word2Vec实例数据训练保存和加载 前言 Transform…

【上岗认证】错题整理记录

目录 🌞一、阶段1:编码规范 🌊编码规范考试-CC 🌞二、阶段2:开发基础 🌊C/C 🌊数据库(Oracle/MySql) 🌞三、阶段3:测试基础 🌊…

Springboot+Vue项目-基于Java+MySQL的家政服务平台系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

实时数仓选型

实时数仓选型 实时数仓选型第一版实时数仓选型第二版 实时数仓选型第一版 实时数仓分层: 计算框架:Flink;存储框架:消息队列(可以实时读取&可以实时写入)ODS:Kafka 使用场景:每过来一条数据,读取到并加工处理DIM: HBase 使用场景:事实表会根据主键获取一行维表数据(1.永…

jna中出现错误解决方案。

jna中出现错误解决方案 为什么会出现这些错误之JNA版本的锅不要手动导入jar包,使用maven切换高版本会出现的错误Structure.getFieldOrder() on class 错误java.lang.IllegalArgumentException: Invalid calling convention 63 错误 为什么会出现这些错误之JNA版本的…

人体跟随小车(旭日x3派,yolov5,ros2)

最终现象 人体跟随 策略 底盘主控是stm32f103c8t6,读取左右轮编码器并标定速度,读取mpu6050的yaw值一并传至上位机。上位机通过usb摄像头捕获图像,送入模型进行推理,根据得到的结果生成控制指令下发给底盘进行人体跟随。

【MySQL】redolog、undolog和binlog日志文件详解

【MySQL】redolog、undolog和binlog日志文件详解 前言redolog设计目标记录内容写入策略 undolog设计目标记录内容写入策略 binlog设计目标记录内容写入策略 小结 前言 当谈论MySQL数据库的日志文件时,通常会涉及到三种主要类型:redo log(重做…

使用Python进行自然语言处理:情感分析

使用Python进行自然语言处理的热门应用:情感分析 自然语言处理(NLP)是人工智能领域中的一个重要分支,它致力于使计算机能够理解、解释和生成人类语言。在NLP的诸多应用中,情感分析是一项备受关注的热门应用之一。情感分析(Sentiment Analysis)是通过分析文本中的情感色…

陪诊小程序开发:线上陪诊行业的发展

在人口老龄化的严重的当下,老人看病也更加困难,而陪诊行业作为一个新型行业,正在走入人们的生活中,帮助大众解决看病难等问题,为大众带来便捷高效的就医环境。 随着互联网时代的到来,各行各业也都开始向线…

FaceDiffuser 部署笔记

目录 依赖项安装: win11 ffmpeg合并报错 修改后代码: facebook/hubert-base-ls960报错 我的解决方法: DiffSpeaker网络音频编码器: 头模加载 transformers 依赖项安装: "tokenizers": "tokeniz…

设置Ollama在局域网中访问的方法(Ubuntu)

趁着Llama3的热度试了一下Ollama,果然部署推理大模型很有用。一个现实的需求是,如果我们要在局域网中访问Ollama上大模型的服务,应该怎么办呢?参考了一下其他博客的方法 例如:一分钱不花!手把手教你部署Go…