0


Vue项目打包问题(生产环境样式失效)

目录

前言

在公司项目发布上线后,出现了部分样式失效的问题。我们引用的是vuetify第三方库,经过检查,发现是部分样式被vuetify自带的css样式给覆盖,原因是生成环境的打包模式与开发环境不同。

打包模式的区别

  • 生产模式(env.prod)

生产模式

下打包,项目会被最小化,所有的css代码会被提取出来放在同一文件夹下(这也是上线后样式出现问题的根本原因)

  • 开发模式
开发模式

打包并不会改变项目的层次结构,换句话说,我们在写代码过程中,页面长啥样,打包上线后就是原本的样式,该模式下并不会改变代码。但是该模式打包后的dist文件依旧比

生产模式

打包后的项目大很多。

案例

在这里插入图片描述

首先我们要知道为什么vuetify的样式会覆盖自定义样式,因为自定义的样式优先级不够高!在生产模式下,所有css代码会被提取到一个文件夹下,而第三方库的css一般会多个类名绑定(例如: .themelight .v-btn),如果自定义样式只绑定一个类名(没有在父类的作用域下),样式优先级不够高,就会被覆盖。

解决方案

  • 方案一:配置vue.config.js文件

vue.config.js

文件中将css的

extract

设置为false,生产环境打包默认为true,这个选项会把css代码提取到一个文件夹下。注意:开发环境的extract选项默认为false

const webpack =require('webpack')
module.exports ={css:{extract:false}};
  • 方案二:覆盖第三方组件原有的类,或者加样式穿透

当我们想修改第三方组件的样式时,可以选择覆盖其原有的类

<template><div class="button-box"><v-btn>Submit</v-btn></div></template><style lang="sass" scoped>.button-box
  //v-btn是当前组件已有的类,在这里设置属性可以覆盖原有的.v-btn
    color:#020202</style>

也可使用

>>>

来提升样式优先级,俗称样式穿透

<template><div class="button-box"><v-btn class="submit-btn">Submit</v-btn></div></template><style lang="sass" scoped>.button-box >>>.submit-btn
  color: #020202</style>
  • 方案三:该方案用于解决紧急情况下需要发布上线(并不能缩小打包后的体积)
在.env.production文件中修改环境变量
// 本应该是production,这里紧急解决问题,可改为develop,以开发环境的打包模式发布上线NODE_ENV='develop'
标签: vue.js 前端 webpack

本文转载自: https://blog.csdn.net/m0_49909696/article/details/128580777
版权归原作者 Inpro-QD 所有, 如有侵权,请联系我们删除。

“Vue项目打包问题(生产环境样式失效)”的评论:

还没有评论