Taro图片素材不显示?--Taro下的webpack配置

栏目: IT技术 · 发布时间: 5年前

内容简介:最近遇到本文只是简单作个记录,涉及文末也简单讨论了图片素材转变成

最近遇到 Taro 下图片素材没显示的小问题,解决完顺藤摸瓜了解了下前端领域 webpack 及其 Loader 的一些原理。

本文只是简单作个记录,涉及 Taro 下一些 webpack 的配置,可以为刚好遇到类似问题的人提供可能的助益。

文末也简单讨论了图片素材转变成 base64 编码这种处理方式。

场景和问题解决

使用 map 组件展示 markers ,代码如下:

import LocationIcon from '../xxx.png'
class XXX {
  render () {
    // 定义marker
    var markers = [{
        iconPath: LocationIcon,
        id: 0,
        latitude,
        longitude,
        width: 38,
        height: 50
    }];
    return (
      ...
      <Map className='...' id="..." longitude={longitude} latitude={latitude} markers={markers}></Map>
      ...
    )
  }
}

问题一:真机没有显示 iconPath 的素材?

思路:

iconPath ,显示的图标,类型 string ,项目目录下的图片路径,支持网络路径、本地路径、代码包路径([2.3.0])

图片是按 Taro-引用图片、音频、字体等文件 所说,通过 ES6import 语法来引用的,即“项目目录下的图片路径”,所以不是组件使用问题。

  • 检查运行过程中生成的Wxml,看看是否生成有问题,以此倒推
<Map className='...' id="..." longitude={...} latitude={...} markers="[{"iconPath":"data:image/png;base64,iVBOR..."}]"></Map>

发现 iconPath 的值变成了 base64 编码后的数据。

小结:

至此,找到直接原因,真机环境 Taro 打包对有些素材进行base64编码,设置给 iconPath 后,不满足文档要求,所以无法显示。

问题二:那为什么有些素材有展示?有些没有展示?

思路:

  • 查看几处引用素材的地方运行过程中生成的Wxml:
<image src="data:image/png;base64,iVBOR..." ...>
<image src=".../.../xxx.png" ...>

发现相同的用法,有些素材是变成 base64 数据,有些依旧是素材路径。

  • 比较素材的区别

查看素材发现,编码成 base64 的,都是几KB的小素材;使用路径的,是十几KB甚至更大的素材。

小结:

依此推断, Taro 只对小素材进行了 base64 编码处理,而对于较大的素材,没有改动。

问题三:这个处理是如何配置的?

思路:

大晚上的,私聊了一下 Taro 的主程,告知这是 webPack 进行的处理。于是找到了Taro文档 进阶指南-编译配置详情 。此处对配置进行了简单说明。

mini.imageUrlLoaderOption

需要参考 url-loader README 关于配置字段的说明。

最终配置如下:

// config/index.js
mini: {
    imageUrlLoaderOption: {
      limit: 10000,
      mimetype: 'image/png',
      encoding: 'base64'
    },
    ...
}

此处配置 imageUrlLoaderOption 的作用是,对于 png 的图片素材,如果体积超过了10000B,则进行 base64 编码。

Taro 在新版本完全开放了 WebPack 的配置,有很多插件可以配置,文档列的比较详细,此处就不再赘述了。主要是以后遇到一些问题可以想到用 webpack 这个层面去解决。

扩展

到此可能会想,为什么会有这样的配置?有什么好处?

简单总结下我的想法:

  1. 相比网络图片,使用 base64 编码的方式,减少加载图片的 http 请求次数,没有因网络加载而带来的延时。
  2. base64 编码只是一种编码方式,不是一种压缩方式,它实际上会增加图片本身的大小(在我之前的文章有介绍过),图片越大增加的越多。
  3. 相比网络图片,如果是大图进行 base64 编码,和多一次 http 请求的耗时比起来,显然划不来。

疑问:

  1. 同一个素材多处使用,进行 base64 编码,会不会导致 CSS 大小增加?不清楚有待考证。
  2. 小的本地素材,进行 base64 编码有什么好处?大概同“素材加载”和“CSS加载”的区别有关系。

如果有前端的同学知道,请不吝赐教哈。

-END-

欢迎到我的博客交流: https://zackzheng.info


以上所述就是小编给大家介绍的《Taro图片素材不显示?--Taro下的webpack配置》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Definitive Guide to HTML5 WebSocket

The Definitive Guide to HTML5 WebSocket

Vanessa Wang、Frank Salim、Peter Moskovits / Apress / 2013-3 / USD 26.30

The browser is, hands down, the most popular and ubiquitous deployment platform available to us today: virtually every computer, smartphone, tablet, and just about every other form factor imaginable c......一起来看看 《The Definitive Guide to HTML5 WebSocket》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

随机密码生成器
随机密码生成器

多种字符组合密码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器