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

Vue项目部署遇到的坑(你肯定会遇到!)

#部署非ROOT环境下组件CSS中 background-img图片问题

总所周知后台部署代码的时候,是直接把我们通过npm run build(vue-cli生成项目) 的代码直接放到ROOT目录的,即使你放到其他目录我们通过config文件build对象下面的

assetsPublicPath: '/clinet', // If you are deployed on the root path, please use '/' 打包访问资源目录

来配置,这样在index.html中静态资源是没问题的,但是如果你在.vue文件中像这样使用背景图

.back-img{
    position: relative;
    width:1273px;
    height: 665px;
    margin:0 auto;
    background:url(/static/imgs/bj.png) no-repeat; //这样
    background-size:100% 100%
  }
复制代码

打包出来的的背景图依然是 background:url(/static/imgs/bj.png) no-repeat; 因为vue-loader根本就不会处理它,但实际能访问到图片的路径应该是background:url(/clinet/static/imgs/bj.png) no-repeat;。最蛋疼是我们把图片都放到了static目录里面,如果要换的要疯掉。没办法只能想办法。。。

##:把图片先上传到云服务器,然后统一使用服务器地址访问,但是也要一个一个修改。。。放弃

##方法二:不用背景图,换img,虽然少了请求,但是loader会把img转成base64增加打包代码体量。。。放弃

##方法三:自己写loader处理配置。。。今天要说的 百度一下很多介绍,这里就不多说了。loader实际上是字符串的处理,所以特别好理解 首先配置loader参数

    {
        test: /\.vue$/,
        loader:'background-loader',
        options:{
           assetsPublicPath:"/clinet" //和assetsPublicPath 保存一致
         }
     }
      
复制代码

下面是loader核心代码

var loaderUtils = require("loader-utils");
var path = require("path");
module.exports = function(source){
	var _this = this;
	//获取到.vue文件,查找是否包含style标签,读取配置项 assetsPublicPath 默认为 '/'
	if(process.env.NODE_ENV === 'production'){//生产环境才转码
		const options = loaderUtils.getOptions(this);
		let reg = /url\((.*)\)/g;
		return source.replace(reg,`url(${options.assetsPublicPath}$1)`);
	}
	return source
}
复制代码

这样就解决了上面的问题,学习loader的写法,有助于更加了解webpack,对新人会有帮助,下一次分享,我将给小伙伴分享插件的写法,希望对小伙伴门有帮助,文笔不好,喷子远离!谢谢。

相关文章:

  • Hyper-v 与Oracle VM VirtualBox 之间的冲突问题
  • 手把手教您将 libreoffice 移植到函数计算平台
  • 通过一个实际例子理解Kubernetes里pod的自动scale - 水平自动伸缩
  • Centos7 Gitea安装教程 - 一款易搭建,运行快的Git服务器
  • LOJ #2058「TJOI / HEOI2016」求和
  • Java核心(五)深入理解BIO、NIO、AIO
  • 苏宁:我们开发百度小程序遇到的那些“坑”
  • EVCache缓存在 Spring Boot中的实战
  • php标签语句
  • 服务器基础知识
  • laravel with 查询列表限制条数
  • 进程与线程(三)——进程/线程间通信
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • c/c++再学习:查找算法了解
  • MFC限制edit控件的字符输入长度
  • @angular/forms 源码解析之双向绑定
  • 【Leetcode】104. 二叉树的最大深度
  • co.js - 让异步代码同步化
  • ES6系列(二)变量的解构赋值
  • gitlab-ci配置详解(一)
  • Node + FFmpeg 实现Canvas动画导出视频
  • pdf文件如何在线转换为jpg图片
  • Solarized Scheme
  • text-decoration与color属性
  • Vultr 教程目录
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 分类模型——Logistics Regression
  • 给github项目添加CI badge
  • 数组的操作
  • 王永庆:技术创新改变教育未来
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • ###C语言程序设计-----C语言学习(3)#
  • $forceUpdate()函数
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (5)STL算法之复制
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (转)socket Aio demo
  • ****Linux下Mysql的安装和配置
  • .dwp和.webpart的区别
  • .NET CORE Aws S3 使用
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .net连接MySQL的方法
  • :O)修改linux硬件时间
  • @synthesize和@dynamic分别有什么作用?
  • [ IO.File ] FileSystemWatcher
  • [\u4e00-\u9fa5] //匹配中文字符
  • [ARM]ldr 和 adr 伪指令的区别
  • [AX]AX2012 R2 出差申请和支出报告
  • [BZOJ 3531][Sdoi2014]旅行(树链剖分+线段树)
  • [Git].gitignore失效的原因