我正在使用webpack,只是尝试将url
属性中指定的background-image
应用于html元素。
我已经查看了几个线程(例如this one),但没有找到适合我的线程。
我的设置如下:
//索引. js
import React from 'react'
import styles from './styles.css'
const MyComponent = () => {
return (
<div className={styles.container}></div>
)
}
export default MyComponent
//样式. css
.container {
background-image: url('../../../static/public/images/my-background.jpg');
}
//网页包配置. js
const path = require('path');
const HtmlWebpackPlugin = require("html-webpack-plugin");
const CopyWebpackPlugin = require('copy-webpack-plugin');
module.exports = {
entry: path.join(__dirname, "src", "index.js"),
output: {
path: path.join(__dirname, "dist"),
filename: "index.bundle.js"
},
mode: process.env.NODE_ENV || 'development',
resolve: {
modules: [path.resolve(__dirname, "src"), "node_modules"],
},
devServer: {
static: path.join(__dirname, 'src')
},
plugins: [
new HtmlWebpackPlugin({
template: path.join(__dirname, "src", "index.html"),
}),
new CopyWebpackPlugin({
patterns: [
{
from: 'static',
to: 'static'
}
]
})
],
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: ["babel-loader"]
},
{
test: /\.(css)$/,
use: ["style-loader", "css-loader"],
},
{
test: /\.(jpg|png|svg|gif)$/,
use: ['url-loader', 'file-loader'],
},
],
},
}
当到达localhost时,我确实看到正在解析的路径:
然而,当我试图到达那个网址时,我看到的只是一个白色的小方块...
这绝对不是图像。我确实发现图像存在于我的构建./dist/static/public/images/my-background.jpg
中
请注意,该图像的尺寸较大:小行星3842
我认为这与webpack加载程序的配置有关,但没有找到如何调整它来让它在这里工作。任何帮助都将非常感谢!
3条答案
按热度按时间wn9m85ua1#
您可能正在使用新版本的Webpack,其中
url-loader
和file-loader
已过时,Asset Modules
是替代版本。尝试使用:
得双曲余切值.
更多信息click here。
flmtquvp2#
我遇到了同样的问题,它最终通过使用
~
引用项目目录并从那里访问public
文件夹来工作。这对我来说很好:)
或另一种方法是将图像移动到
src
目录,webpack会将它们作为静态文件打包到名为static/media
的文件夹中8i9zcol23#
解决方案是关闭
css-loader
的URL解析,因为在构建webpack时CSS文件不会更新URL字符串请注意,这将使得.css中使用的文件不会被散列,并且在将项目构建到/dist/文件夹时,其结构将类似于原始的/public/文件夹。这就是它工作的原因。
有关参考,请参阅此github问题和this one
此外,我使用: