问题:
新建img文件夹放入图片资源。
在js文件夹里新建image.js,内容如下:
function packImg() {
//创建一个容器
const oe = document.createElement('div')
//创建img标签,设置src属性
const oImg = document.createElement('img')
//加default是为了兼容webpack5
oImg.src = require('../img/webpack5.jpg').default
oe.appendChild(oImg)
return oe
}
document.body.appendChild(packImg())
在index.js中添加如下命令行导入。
import './js/image.js'
运行npm run build报错。
问题分析:
图片并没有打包成功。
解决:
安装file-loader:
npm i file-loader -D
修改webpack.config.js:
const path = require('path')
module.exports = {
entry: './src/index.js',
output: {
filename: 'build.js',
//output必须设置绝对路径,所以这里导入path模块
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [
{
//简写方式
test: /\.css$/,
//先执行style-loader再执行css-loader
//顺序规则,从右往左,从下往上,因为兼容性处理要在css调用之前,所以需要将postcss-loader的配置放在css-loader右边
use: ['style-loader', {
loader: 'css-loader',
options: {
// 往前找一个,即追回到postcss-loader
importLoaders: 1
}
}, 'postcss-loader']
},
{
//简写方式
test: /\.less$/,
//先执行style-loader再执行css-loader
//顺序规则,从右往左,从下往上
use: ['style-loader', 'css-loader', 'postcss-loader', 'less-loader']
},
{
test: /\.(png|svg|gif|jpe?g)$/,
use: ['file-loader']
}
]
}
}
注意:
//静态资源加载例如图片加载需要配置路径
publicPath: "./dist/"
命令npm run dev运行得结果如下:
因为图片需要配置大小,所以需要对webpack.config.js与image.js重新配置大小。
image.js如下:
function packImg() {
//创建一个容器
const oe = document.createElement('div')
//创建img标签,设置src属性
const oImg = document.createElement('img')
//设置宽度
oImg.width = 400
oImg.src = require('../img/webpack5.jpg')
oe.appendChild(oImg)
return oe
}
document.body.appendChild(packImg())
webpack.config.js如下:
const path = require('path')
module.exports = {
entry: './src/index.js',
output: {
filename: 'build.js',
//output必须设置绝对路径,所以这里导入path模块
path: path.resolve(__dirname, 'dist'),
//静态资源加载例如图片加载需要配置路径
publicPath: "./dist/"
},
module: {
rules: [
{
//简写方式
test: /\.css$/,
//先执行style-loader再执行css-loader
//顺序规则,从右往左,从下往上,因为兼容性处理要在css调用之前,所以需要将postcss-loader的配置放在css-loader右边
use: ['style-loader', {
loader: 'css-loader',
options: {
// 往前找一个,即追回到postcss-loader
importLoaders: 1
}
}, 'postcss-loader']
},
{
//简写方式
test: /\.less$/,
//先执行style-loader再执行css-loader
//顺序规则,从右往左,从下往上
use: ['style-loader', 'css-loader', 'postcss-loader', 'less-loader']
},
{
test: /\.(png|svg|gif|jpe?g)$/,
// use: ['file-loader']
use: [{
loader: 'file-loader',
options: {
esModule: false //不转为esModule
}
}]
}
]
}
}
设置成功:
也可以按照如下方式配置:
//image.js
import oImgSrc from '../img/webpack5.jpg'
function packImg() {
//创建一个容器
const oe = document.createElement('div')
//创建img标签,设置src属性
const oImg = document.createElement('img')
oImg.width = 700
// oImg.src = require('../img/webpack5.jpg')
oImg.src = oImgSrc
oe.appendChild(oImg)
return oe
}
document.body.appendChild(packImg())
//webpack.config.js
const path = require('path')
module.exports = {
entry: './src/index.js',
output: {
filename: 'build.js',
//output必须设置绝对路径,所以这里导入path模块
path: path.resolve(__dirname, 'dist'),
//静态资源加载例如图片加载需要配置路径
publicPath: "./dist/"
},
module: {
rules: [
{
//简写方式
test: /\.css$/,
//先执行style-loader再执行css-loader
//顺序规则,从右往左,从下往上,因为兼容性处理要在css调用之前,所以需要将postcss-loader的配置放在css-loader右边
use: ['style-loader', {
loader: 'css-loader',
options: {
// 往前找一个,即追回到postcss-loader
importLoaders: 1
}
}, 'postcss-loader']
},
{
//简写方式
test: /\.less$/,
//先执行style-loader再执行css-loader
//顺序规则,从右往左,从下往上
use: ['style-loader', 'css-loader', 'postcss-loader', 'less-loader']
},
{
test: /\.(png|svg|gif|jpe?g)$/,
use: ['file-loader']
}
]
}
}
方法二:采用background url处理:
在css目录下新建image.css,内容如下:
.bgBox {
width: 240px;
height: 310px;
border: 1px solid orange;
background-image: url('../img/webpack5.jpg');
}
在image.js里导入
import '../css/img.css'
import oImgSrc from '../img/webpack5.jpg'
import '../css/img.css'
function packImg() {
//创建一个容器
const oe = document.createElement('div')
//创建img标签,设置src属性
const oImg = document.createElement('img')
oImg.width = 700
// oImg.src = require('../img/webpack5.jpg')
oImg.src = oImgSrc
oe.appendChild(oImg)
//创建背景图片
const obImg = document.createElement('div')
obImg.className = 'bgBox'
oe.appendChild(obImg)
return oe
}
document.body.appendChild(packImg())
/**
* 两种设置图片的方式:
* 1.使用img src:
* +使用require导入图片,此时如果不配置esModule:false ,则需.defalut导出
* +采用import xxx from 图片资源,此时可以直接使用 xxxx
* 2.background url
*
*/
运行之后发现边框出现,图片没有出现,需要在webpack.config.js里面配置。
const path = require('path')
module.exports = {
entry: './src/index.js',
output: {
filename: 'build.js',
//output必须设置绝对路径,所以这里导入path模块
path: path.resolve(__dirname, 'dist'),
//静态资源加载例如图片加载需要配置路径
publicPath: "./dist/"
},
module: {
rules: [
// {
// //test一般就是一个正则表达式,用于匹配我们需要处理的文件类型
// test:/\.css$/,
// //use
// use:[
// {
// loader:'css-loader'
// }
// ]
// },
{
//简写方式
test: /\.css$/,
//先执行style-loader再执行css-loader
//顺序规则,从右往左,从下往上,因为兼容性处理要在css调用之前,所以需要将postcss-loader的配置放在css-loader右边
use: ['style-loader', {
loader: 'css-loader',
options: {
// 往前找一个,即追回到postcss-loader
importLoaders: 1,
//解决图片加载不出的问题
esModule: false
}
}, 'postcss-loader']
},
{
//简写方式
test: /\.less$/,
//先执行style-loader再执行css-loader
//顺序规则,从右往左,从下往上
use: ['style-loader', 'css-loader', 'postcss-loader', 'less-loader']
},
{
test: /\.(png|svg|gif|jpe?g)$/,
use: ['file-loader']
// use: [{
// loader: 'file-loader',
// options: {
// esModule: false //不转为esModule
// }
// }]
}
]
}
}
运行成功。
源代码:webpack5的案例演示