解锁在vue中引入图片的正确姿势

大家都知道,在H5中调用本地静态资源引入图片,是通过 img 标签的 src 属性:

<img src="/urltoimg">

使用vue项目开发中,很多人会遇到打包后webpack找不到图片路径的问题,下面是引入图片的正确方法:

1、在js中引入图片,在template中自动绑定

由于图片一般是动态绑定的,引入图片一般使用require(),图片是作为模块引入项目中。这样webpack会根据自己的规则解析图片,打包后,会替换为解析后的图片地址。如果直接写路径,打包后webpack是找不到图片的。

// template中动态绑定
<img :src="imgSrc">
// javascript
data () {
  return {
    imgSrc:require('../assets/img/...')
  }
}
2、如果在template中引入绝对路径,不需要require()。
// template 没有使用动态绑定
<img src="../assets/img/...'>
3、在style中引入图片,使用url()。
// style 
.index-board-car .index-board-item-inner{
  background: url(../assets/images/1.png) no-repeat;
}
.index-board-loud .index-board-item-inner{
  background: url(../assets/images/2.png) no-repeat;
}
.index-board-earth .index-board-item-inner{
  background: url(../assets/images/3.png) no-repeat;
}
.index-board-hill .index-board-item-inner{
  background: url(../assets/images/4.png) no-repeat;
后记

一般情况下,通过webpack+vuecli默认打包的css、js等资源,路径都是绝对的。
然鹅,部署到带有文件夹的项目中,这种绝对路径就会出现问题。因为webpack把配置的static文件夹当成了根路径,那么要解决这种问题,就得引用相对路径。

解决办法

打开webpack.prod.conf.js
找到output:增加 publicPath: './', 即可。

  output: {
    publicPath: './',
    path: config.build.assetsRoot,
    filename: utils.assetsPath('js/[name].[chunkhash].js'),
    chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
  },

那么这样后,资源的引用路径就正确了。

当然在config文件夹下的index.js中修改 assetsPublicPath: './'同样也可以达到资源的相对引用。
上面虽然解决了资源路径的引用问题,但是资源里面的背景图片,不像index.html中加载资源一样,通过./static/js/app.js引用可以正常加载;图片资源是通过css加载的,如 background: url("../../assets/images/logo.png") no-repeat;被打包后变成了url(static/img/logo.2f00bf2.png) no-repeat;所以我们要保留css引用图片的正常路径,即:

url(../../static/img/logo.2f00bf2.png) no-repeat

需要修改build文件夹下的utils.js代码,如下所示:
添加PublicPath: '../../';

    if (options.extract) {
      return ExtractTextPlugin.extract({
        use: loaders,
        fallback: 'vue-style-loader',
        PublicPath: '../../'
      })
    } else {
      return ['vue-style-loader'].concat(loaders)
    }

添加一行代码,这样不论是字体还是图片的引用问题都能解决。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容