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

 更新时间:2023年12月19日 10:23:44   作者:Inpro-QD  
在Vue开发过程中,项目的打包是一个非常重要的步骤,下面这篇文章主要给大家介绍了关于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项目打包问题的文章就介绍到这了,更多相关Vue项目打包问题内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue使用qrcode生成二维码的方法

    vue使用qrcode生成二维码的方法

    这篇文章给大家介绍了vue使用qrcode生成二维码的方法,在Vue中实现二维码生成需要使用第三方库来处理生成二维码的逻辑,常用的库有qrcode和vue-qrcode,所以接下来小编将给大家介绍vue qrcode生成二维码的方法示例,需要的朋友可以参考下
    2024-01-01
  • vue实现点击翻转效果

    vue实现点击翻转效果

    这篇文章主要为大家详细介绍了vue实现点击翻转效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • vue原理Compile从新建实例到结束流程源码

    vue原理Compile从新建实例到结束流程源码

    这篇文章主要为大家介绍了vue原理Compile从新建实例到结束流程源码,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Vue源码学习之响应式是如何实现的

    Vue源码学习之响应式是如何实现的

    最近接触了vue.js,一度非常好奇vue.js是如何监测数据更新并且重新渲染页面,这篇文章主要给大家介绍了关于Vue源码学习之响应式是如何实现的相关资料,需要的朋友可以参考下
    2021-10-10
  • 使用elementUI的表格table给列添加样式

    使用elementUI的表格table给列添加样式

    这篇文章主要介绍了使用elementUI的表格table给列添加样式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • vue template中slot-scope/scope的使用方法

    vue template中slot-scope/scope的使用方法

    今天小编就为大家分享一篇vue template中slot-scope/scope的使用方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • Vue Cli3 打包配置并自动忽略console.log语句的方法

    Vue Cli3 打包配置并自动忽略console.log语句的方法

    这篇文章主要介绍了Vue Cli3 打包配置并自动忽略console.log语句的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 使用D3.js+Vue实现一个简单的柱形图

    使用D3.js+Vue实现一个简单的柱形图

    这篇文章主要介绍了使用D3.js+Vue实现一个简单的柱形图,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-08-08
  • Vue项目打包部署全过程(history模式)

    Vue项目打包部署全过程(history模式)

    vue项目中我们比较常用的模式为hash和history模式,下面这篇文章主要给大家介绍了关于Vue项目打包部署的全过程,讲解的是vue-router中history模式的部署,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • vue中引入第三方字体文件的方法示例

    vue中引入第三方字体文件的方法示例

    这篇文章主要介绍了vue中引入第三方字体文件的方法示例,文中讲述了实现方法及其错误的解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12

最新评论