CCC*_*CCC 6 javascript sass urlloader reactjs webpack-5
在我的 scss 文件中,我使用background-image: url("../../../assets/images/home/banner-mobile.png");
应用程序运行成功,但没有显示背景图片:
webpack/webpack.base.js
const webpack = require("webpack");
const path = require("path");
const utils = require("./utils");
const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
entry: "./src/index.jsx",
resolve: {
alias: {
"@": utils.resolve("src")
},
extensions: ["*", ".js", ".jsx"],
fallback: {...},
},
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: {
loader: "babel-loader",
},
},
{
test: /\.(sa|sc|c)ss$/,
use: [
{
loader: "style-loader",
},
{
loader: "css-loader",
},
{
loader: "sass-loader"
},
{
loader: "sass-resources-loader",
options: {
resources: ["./src/assets/scss/main.scss"],
},
},
],
},
{
test: /\.(png|jpg|gif)$/i,
use: [
{
loader: "url-loader",
options: {
limit: 8192
},
},
],
}
],
},
plugins: [
new HtmlWebpackPlugin({
template: "public/index.html",
filename: "index.html",
inject: true,
})
],
};
Run Code Online (Sandbox Code Playgroud)
webpack/webpack.dev.js
const { merge } = require("webpack-merge");
const base = require("./webpack.base");
const Dotenv = require("dotenv-webpack");
module.exports = merge(base, {
mode: "development",
devtool: "inline-source-map",
output: {
publicPath: '/',
},
devServer: {
port: 3000,
static: true,
static: 'dist'
},
plugins: [new Dotenv({ path: "./.env.development" })],
});
Run Code Online (Sandbox Code Playgroud)
更新 1
当我在 Web Inspector > 来源中查看 png 时:

更新 2:
当我通过 VSCode 构建并查看图像时,它显示如下:

不确定以下文件是否相关
webpack/Util.js
const path = require('path')
module.exports = {
resolve: function(dir) {
return path.join(__dirname, '..', dir)
}
}
Run Code Online (Sandbox Code Playgroud)
由于您使用的是 Webpack 5,我建议使用资产模块而不是已弃用的加载器
module: {
rules: [
// ...
{
test: /\.(png|jpg|gif)$/i,
type: "asset",
parser: {
dataUrlCondition: {
maxSize: 8192
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
我怀疑您遇到了文档中所述的资源处理重复问题......
当在 webpack 5 中使用旧的资源加载器(即
file-loader/url-loader/raw-loader)和资源模块时,您可能希望停止资源模块再次处理您的资源,因为这会导致资源重复。这可以通过将资产的模块类型设置为 来完成'javascript/auto'。
| 归档时间: |
|
| 查看次数: |
4390 次 |
| 最近记录: |