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'
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值