前言:
本文演示了
- webpack如何在css文件中引入图片;
 - webpack如何在html中引入图片;
 
需要安装配置的loader: file-loader;
为何要使用file-loader:
如果我们希望在页面引入图片(包括img的src和background的url)。当我们基于webpack进行开发时,引入图片会遇到一些问题。
其中一个就是引用路径的问题。拿background样式用url引入背景图来说,我们都知道,webpack最终会将各个模块打包成一个文件,因此我们样式中的url路径是相对入口html页面的,而不是相对于原始css文件所在的路径的。这就会导致图片引入失败。这个问题是用file-loader解决的,file-loader可以解析项目中的url引入(不仅限于css),根据我们的配置,将图片拷贝到相应的路径,再根据我们的配置,修改打包后文件引用路径,使之指向正确的文件。
安裝file-loader
$ npm i -D file-loader
package.json目前配置:
配置webpack.config.js
在common下新增img文件夹,并添加图片dog.jpeg。
我目前用的项目目录:
示例一、在css中引入我们的图片
编写main.css
在我们的app.js中引入main.css
执行 npm run build构建项目。
示例二、在html中引入图片:重新编辑我们的app.js
执行 npm run build构建项目。
PS:webpack和图片引入的一些问题
问题描述
- 需要使用<img>标签引入多个图片
 - 理想方案是将图片的相关信息(图片文字,图片相对路径)整合到一个数组imageList
 - 然后对imageList做一个map render出图片列表
 
const imageList = [
 {id:1,info:'中国银行',uri:'./assets/1.jpg'},
 {id:2,info:'中国农业银行',uri:'./assets/2.jpg'},
 {id:3,info:'中国建设银行',uri:'./assets/3.jpg'}
]
imageList.map((img)=>{
  return (
  <div>
   {img.info}
   <img src={img.uri} />
  </div>
  )
})
但是这样做导致了图片无法找到
发现请求图片路径出现了问题:所有图片请求的路径变成了当前的url拼接uri
换成import image from './assets/1.jpg'将image给src就可以拿到图片
发现这是webpack引入图片的方式
问题原因
Q1:这两种方式的区别?
A2:主要是资源路径的不同
- 赋给src相对路径:导致资源请求的路径变成:当前url+src的值
 - 赋给src import的文件:首先使用import可以返回一个字符串这个字符串是文件被打包之后(在静态目录下)的绝对路径。因此当前请求图片的路径就会变成:端口号+import的值
 
最后请求图片的路径很好解释:
- 如果src的值以slash开头那么会被认为是以静态文件为根目录的绝对路径
 - 如果src的值不以slash开头那么会被认为是当前路径的相对路径
 
总结为:静态服务器可以被当做文件系统看待,这些uri就是文件路径
Q2:图片是如何被webpack打包的?
A2: 仅对于图片的import:
打包时机:在项目中的图片并不是都会被打包的,经过尝试发现通过import或者background:url(image path)引入的图片才会被打包
打包位置:通过对file-loader的设置
{
test: /\.(jpg|png|svg|pdf)$/,
exclude: /font.*\.svg$/,
loader: 'file-loader"htmlcode">
const BANK_LIST = [
 {name: '中国银行', img: './assets/bank-logo-6.png', id: 1},
 {name: '中国建设银行', img: './assets/bank-logo-7.png', id: 2},
 {name: '兴业银行', img: './assets/bank-logo-8.png', id: 3}
]
BANK_LIST.map((bank)=>{
  return (
    <img src={require(bank.img+'')} />
  )
})
我的另外一种解决方案(由于项目中的eslint要求不支持动态引入文件)
使用webpack带的require.context('pathToDirectory')他可以循环的将一个目录下的所有文件引入
const BANK_LIST = {
 './bank-logo-6.png': {name: '中国银行', id: 1},
 './bank-logo-7.png': {name: '中国建设银行', id: 2},
 './bank-logo-8.png': {name: '兴业银行', id: 3}
 }
 const pathToImages = require.context('./assets');
 const originalBankList = pathToImages.keys().map((key) => {
 return Object.assign({}, BANK_LIST[key], {url: pathToImages(key)})
 });
 
//这时候originalBankList的每一项会变成
{name: '中国银行', id: 1,url: "/app/src/containers/WisePort/CheckoutCounterContai…/bank-logo-1.9f949c516315756e18c0cb7d572f4d2c.png"'}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
 - 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
 - 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
 - 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
 - 群星《2024好听新歌42》AI调整音效【WAV分轨】
 - 王思雨-《思念陪着鸿雁飞》WAV
 - 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
 - 李健《无时无刻》[WAV+CUE][590M]
 - 陈奕迅《酝酿》[WAV分轨][502M]
 - 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
 - 群星《吉他王(黑胶CD)》[WAV+CUE]
 - 齐秦《穿乐(穿越)》[WAV+CUE]
 - 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
 - 邝美云《邝美云精装歌集》[DSF][1.6G]
 - 吕方《爱一回伤一回》[WAV+CUE][454M]
 
                        




