使用webpack打包图片文件
- 在scr目录下创建image文件夹,并且添加几张图片
- 在main.js使用import方式引入所有图片,并且append到app节点下
import i1 from './image/image1.png'
import i2 from './image/image2.png'
let img1 = document.createElement('img')
img1.src = i1
let img2 = document.createElement('img')
img2.src = i2
let app = document.getElementById('app')
app.appendChild(img1)
app.appendChild(img2)
- 执行webpack,会出现报错信息,提示需要
loader :
ERROR in ./src/image/image1.jpg 1:0 Module parse failed: Unexpected character ‘�’ (1:0) You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders (Source code omitted for this binary file) @ ./src/main.js 9:0-35 13:48-50
npm install file-loader@5.0.2 -D
- 在webpack.config.js的module的rules中添加内容:
module: {
rules: [
{
test: /\.(png|jpg|gif)/i,
use: ['file-loader']
}
]
},
- 再重新执行webpack命令,在浏览器预览index.html即可看到图片
将小图片转为base64编码,减少请求次数
npm install url-loader@3.0.0 -D
- 把image文件夹下的其中一个图片缩小,我把它缩小到只有3k大小
- 修改webpack.config.js中的module的rules,将刚才的file-loader注释掉
module: {
rules: [
{
test: /\.(png|jpg|gif)/i,
use: [{
loader: 'url-loader',
options: {
limit: 1024*4,
name: 'img/[name].[hash:8].[ext]'
}
}]
}
]
},
- 将dist目录删掉重新执行webpack,可以发现新生成的dist目录下只有一个图片,这样就成功使用url-loader了
在html中引用图片
- 直接在html中引用图片,路径如:’./src/image/image1.jpg’,在开发时候是可以显示,但是打包之后文件的目录和名称都发生了变化,这样原原本本打包出来的html所引用的图片就会找不到资源
- 下载html-loader@0.5.5处理html
npm install html-loader@0.5.5 -D
- 在模板html中添加代码(public目录下的index.html):
<img src="../src/image/image1.jpg" alt="">
- 执行webpack命令之后发现生成的html中img标签内容是这样的:
<img src="[object Module]" alt="">
- 上面生成的标签是无法正常显示的。原因是url-loader默认是采用es6的模块化,而html-loader默认是采用commonjs模块化。解决办法:在url-loader的options配置中增加一项:
esModule: false
- 以css的background属性引用图片也可以正常显示。
webpack打包时生成单独的css文件
- 观察打包的文件夹dist可以发现,虽然我们的源码有css文件,但是打包之后并没有生成css文件,样式代码都嵌在了app.js中。
- 安装插件mini-css-extract-plugin@0.9.0
npm install mini-css-extract-plugin@0.9.0 -D
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
- 修改css的loader,将style-loader改成插件的loader
{
test: /\.css$/i,
use: [MiniCssExtractPlugin.loader, 'css-loader']
},
new MiniCssExtractPlugin({
filename: 'css/index.css'
})
- 重新执行webpack可以看到生成了css目录,下面有index.css文件
|