在 webpack 5 中,可以通过 内置的 Asset 模块,不用再引入对应的loader,就可以轻松地将images图片相关的资源内容轻松引入我们的系统中。 首先创建一个示例工程目录:webpack-image,然后用npm进行初始化 ,接着在本地安装 webpack相关内容: 工程的目录结构如下: 其中package.json文件内如如下: dist/index.html的文件内容如下: webpack.config.js的文件内容如下: 示例采用Webpack的官方logo作为图片资源引入,图片如下 示例在index.js中动态创建一个图片页面元素,并添加为body的子元素,同时也创建一个样式文件style.css在src的目录下,编写一个把上面的图片作为背景图片的样式。 由于引入了样式资源需要安装对应样式的loader: 把webpack.jpg放到工程的src目录下,工程结果如下: 修改dist/index.html的内容,添加对样式的引用: 编写样式文件style.css的文件内容: 在index.js,引入样式文件,并动态创建一个image页面元素,并添加到body。 修改webpack.config.js的内容,配置对应样式,图片资源的loader内容。 然后执行npm run build进行项目的构建。 然后打开dist目录下的index.html文件。 从目录中可以看到,对图片的引用名字变为了92dfb2ab18da7819808e.jpg。意味着webpack对引入的文件进行了处理。初始化示例工程
mkdir webpack-image
cd webpack-image
npm init -y
npm install webpack webpack-cli --save-dev
webpack-image
|- package.json
|- /dist
|- index.html
|- /src
|- index.js
|-webpack.config.js
{
"name": "webpack-image",
"version": "1.0.0",
"description": "",
"private": true,
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"webpack": "^5.28.0",
"webpack-cli": "^4.6.0"
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>webpack Image图片资源</title>
<script src="bundle.js"></script>
</head>
<body>
</body>
</html>
const path=require('path')
module.exports={
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname,'dist')
}
}
加载及配置图片资源
npm install style-loader css-loader --save-dev
webpack-image
|- package.json
|- /dist
|- index.html
|- /src
|- index.js
|- style.css
|- webpack.jpg
|-webpack.config.js
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>webpack Image图片资源</title>
<script src="bundle.js"></script>
</head>
<body>
<div class="webpack_logo">欢迎来到Webpack官网</div>
</body>
</html>
.webpack_logo {
background-image: url('./webpack.jpg');
height: 400px;
width: 400px;
}
import './style.css'
import webpack from './webpack.jpg'
window.onload = function(){
// 创建Image对象
const webpackLogo = new Image();
// 设置引用图片资源
webpackLogo.src = webpack;
// 添加到body
document.body.appendChild(webpackLogo)
}
const path=require('path')
module.exports={
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname,'dist')
},
module: {
rules: [
{
test: /\.css$/i,
use: ["style-loader", "css-loader"]
},
{
test: /\.(jpg|png|gif)$/i,
type: "asset/resource"
}
]
}
}
npm run build
> [email protected] build D:\work\webpack5\webpack-image
> webpack
asset 92dfb2ab18da7819808e.jpg 29.5 KiB [emitted] [immutable] [from: src/webpack.jpg] (auxiliary name: main)
asset bundle.js 4.6 KiB [emitted] [minimized] (name: main)
runtime modules 1.71 KiB 5 modules
orphan modules 326 bytes [orphan] 1 module
cacheable modules 10.4 KiB (javascript) 29.5 KiB (asset)
modules by path ./src/ 1.31 KiB (javascript) 29.5 KiB (asset)
./src/index.js + 1 modules 605 bytes [built] [code generated]
./src/webpack.jpg 42 bytes (javascript) 29.5 KiB (asset) [built] [code generated]
./node_modules/css-loader/dist/cjs.js!./src/style.css 696 bytes [built] [code generated]
modules by path ./node_modules/ 9.04 KiB
./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js 6.67 KiB [built] [code generated]
./node_modules/css-loader/dist/runtime/api.js 1.57 KiB [built] [code generated]
./node_modules/css-loader/dist/runtime/getUrl.js 830 bytes [built] [code generated]
WARNING in configuration
The 'mode' option has not been set, webpack will fallback to 'production' for this value.
Set 'mode' option to 'development' or 'production' to enable defaults for each environment.
You can also set it to 'none' to disable any default behavior. Learn more: https://webpack.js.org/configuration/mode/
webpack 5.28.0 compiled with 1 warning in 1019 ms