#部署非ROOT环境下组件CSS中 background-img图片问题html
总所周知后台部署代码的时候,是直接把咱们经过npm run build(vue-cli生成项目) 的代码直接放到ROOT目录的,即便你放到其余目录咱们经过config文件build对象下面的vue
assetsPublicPath: '/clinet', // If you are deployed on the root path, please use '/' 打包访问资源目录
webpack
来配置,这样在index.html中静态资源是没问题的,可是若是你在.vue文件中像这样使用背景图web
.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目录里面,若是要换的要疯掉。没办法只能想办法。。。vue-cli
##:把图片先上传到云服务器,而后统一使用服务器地址访问,可是也要一个一个修改。。。放弃npm
##方法二:不用背景图,换img,虽然少了请求,可是loader会把img转成base64增长打包代码体量。。。放弃bash
##方法三:本身写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,对新人会有帮助,下一次分享,我将给小伙伴分享插件的写法,但愿对小伙伴门有帮助,文笔很差,喷子远离!谢谢。ui