css 中的 webpack 2 和背景图片
webpack 2 and background images in css
我在 React 应用程序中使用 webpack2(我对它很陌生)。
当我通过 img 标签在应用程序中加载图像时,一切正常。但是在 css.
中使用图像作为背景 url 时我无法让它工作
这是我的 webpack:
`module.exports = {
devtool:isDev ? 'cheap-module-eval-source-map' : 'source-map',
entry: [
'react-hot-loader/patch',
'webpack-hot-middleware/client',
'./src/index.js'
],
output: {
path: path.join(__dirname, 'dist'),
publicPath: '/',
filename: 'bundle.js'
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new webpack.NoEmitOnErrorsPlugin()
],
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
include: path.join(__dirname, 'src'),
use: [
{
loader: 'babel-loader',
options: {
babelrc: false,
presets: [
['es2015', {modules: false} ],
'react',
'stage-2'
],
plugins: ['react-hot-loader/babel']
}
}
]
},
{
enforce: 'pre',
test: /\.js$/,
exclude: /node_modules/,
loader: 'eslint-loader',
options: {
failOnWarning: true,
failOnError: true
}
},
{
test: /\.scss$/,
use: ['style-loader', 'css-loader', 'sass-loader']
},
{
test: /\.(png|jpe?g|gif|ico)$/,
use: 'file-loader?name=assets/[name].[hash].[ext]'
},
{
test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
use: 'url-loader?limit=10000&mimetype=application/font-woff'
},
{
test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/,
use: 'url-loader?limit=10000&mimetype=application/font-woff'
},
{
test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
use: 'url-loader?limit=10000&mimetype=application/octet-stream'
},
{
test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,
loader: 'file-loader'
},
{
test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
loader: 'url-loader?prefix=assets/[name].[hash].[ext]&limit=10000&mimetype=image/svg+xml'
},
]
},
devServer: {
contentBase: './dist',
hot: true
}
};`
我正在使用 express js 作为服务器,但我认为这与问题无关。
然后在我的 css 文件中
background: url('/assets/logo.svg');
如果我更改路径,我会收到错误,但如果我使用绝对路径,则没有错误,网络选项卡 returns 304,但如果我转到 localhost/assets/logo.svg,它只会重新加载页面和徽标未加载。
我搜索了很多 SO 问题,但我无法弄清楚我的代码有什么问题。
您的 webpack-dev-server
配置似乎有问题。例如,devServer.contentBase
应该是 absolute path:
output: {
publicPath: '/',
path: __dirname + "/dist",
filename: "[name].js"
},
在您的 css 中,您指的是“/assets/logo.svg”。我想这是您的服务器提供的 public 路径。
您必须从相对路径加载图像,该路径是您的文件所在的路径。
如果您的图像在 "assets/logo.svg" 中,那么您将不得不使用此 url。
background: url('assets/logo.svg');
其中 assets 是您的图像所在的文件夹。
我在 React 应用程序中使用 webpack2(我对它很陌生)。 当我通过 img 标签在应用程序中加载图像时,一切正常。但是在 css.
中使用图像作为背景 url 时我无法让它工作这是我的 webpack:
`module.exports = {
devtool:isDev ? 'cheap-module-eval-source-map' : 'source-map',
entry: [
'react-hot-loader/patch',
'webpack-hot-middleware/client',
'./src/index.js'
],
output: {
path: path.join(__dirname, 'dist'),
publicPath: '/',
filename: 'bundle.js'
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new webpack.NoEmitOnErrorsPlugin()
],
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
include: path.join(__dirname, 'src'),
use: [
{
loader: 'babel-loader',
options: {
babelrc: false,
presets: [
['es2015', {modules: false} ],
'react',
'stage-2'
],
plugins: ['react-hot-loader/babel']
}
}
]
},
{
enforce: 'pre',
test: /\.js$/,
exclude: /node_modules/,
loader: 'eslint-loader',
options: {
failOnWarning: true,
failOnError: true
}
},
{
test: /\.scss$/,
use: ['style-loader', 'css-loader', 'sass-loader']
},
{
test: /\.(png|jpe?g|gif|ico)$/,
use: 'file-loader?name=assets/[name].[hash].[ext]'
},
{
test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
use: 'url-loader?limit=10000&mimetype=application/font-woff'
},
{
test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/,
use: 'url-loader?limit=10000&mimetype=application/font-woff'
},
{
test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
use: 'url-loader?limit=10000&mimetype=application/octet-stream'
},
{
test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,
loader: 'file-loader'
},
{
test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
loader: 'url-loader?prefix=assets/[name].[hash].[ext]&limit=10000&mimetype=image/svg+xml'
},
]
},
devServer: {
contentBase: './dist',
hot: true
}
};`
我正在使用 express js 作为服务器,但我认为这与问题无关。
然后在我的 css 文件中
background: url('/assets/logo.svg');
如果我更改路径,我会收到错误,但如果我使用绝对路径,则没有错误,网络选项卡 returns 304,但如果我转到 localhost/assets/logo.svg,它只会重新加载页面和徽标未加载。 我搜索了很多 SO 问题,但我无法弄清楚我的代码有什么问题。
您的 webpack-dev-server
配置似乎有问题。例如,devServer.contentBase
应该是 absolute path:
output: {
publicPath: '/',
path: __dirname + "/dist",
filename: "[name].js"
},
在您的 css 中,您指的是“/assets/logo.svg”。我想这是您的服务器提供的 public 路径。 您必须从相对路径加载图像,该路径是您的文件所在的路径。 如果您的图像在 "assets/logo.svg" 中,那么您将不得不使用此 url。
background: url('assets/logo.svg');
其中 assets 是您的图像所在的文件夹。