如何在 Webpack 中使用 css 中的图像

IT技术 css image reactjs webpack loader
2021-03-23 08:59:00

我正在使用 Webpack 设置进行 React,并且正在努力完成看似简单的任务。我希望 webpack 包含图像,并像使用 gulp 一样将它们最小化,但我无法弄清楚。我只想能够像这样在我的 css 中链接图像:

/* ./src/img/background.jpg */

body { background: url('./img/background.jpg'); }

我的所有 css/js/img 文件夹都在 src 文件夹中。Webpack 输出到 dist 文件夹,但我不知道如何在那里获取图像。

这是我的 webpack 设置:

 var path = require('path');
 var webpack = require('webpack');
 var HtmlWebpackPlugin = require('html-webpack-plugin');

 module.exports = {
  devtool: 'cheap-eval-source-map',
  entry: [
   'webpack-dev-server/client?http://localhost:8080',
   'webpack/hot/dev-server',
   './src/index.js'
  ],
  output: {
  path: path.join(__dirname, 'dist'),
  //  publicPath: './dist',
  filename: 'bundle.js'
  },
  plugins: [
  new webpack.HotModuleReplacementPlugin(),
  new HtmlWebpackPlugin({
  template: './src/index.html'
   })
  ],
  module: {
  loaders: [{
   exclude: /node_modules/,
   test: /\.js?$/,
   loader: 'babel'
   }, {
  test: /\.scss$/,
  loader: 'style!css!sass'
    }, {
  test: /\.(png|jpg)$/,
  loader: 'file-loader'
  }]
 },

 devServer: {
  historyApiFallback: true,
  contentBase: './dist',
  hot: true
  }
};
2个回答

我遇到了类似的问题,发现您可以像任何其他 require 或 import 语句一样使用url-loader来解析"url()"CSS 中的语句。

要安装它:

npm install url-loader --save-dev

它将安装可以将解析路径转换为 ​​BASE64 字符串的加载程序。

在你的 webpack 配置文件中使用 url-loader in loader

{
  test: /\.(png|jpg)$/,
  loader: 'url-loader'
}

还要确保您正确指定了您的公共路径和您尝试加载的图像路径。

@VariableContent btw url-loader 有一个选项limit,如果图像大于限制,它将解析为 url 而不是 base64 字符串
2021-05-22 08:59:00
@ user3737841 您应该能够require查看样式表中的图像。例如,background-image: url('../assets/img/logo-dark.png')您只需要尝试/调整即可使路径正确。
2021-05-23 08:59:00
@VariableContent 是的,只需使用文件加载器。图像将被复制到输出文件夹中。
2021-05-23 08:59:00
是否可以在不内联图像的情况下实现相同的最终结果?理想情况下,应该将图像复制到保留相同相对路径的 dist 文件夹中。这可能吗?
2021-06-12 08:59:00
好吧,我的 webpack-dev 服务器从 /dist 提供服务,而我的图像在 /src 中,所以您知道我将如何引用 .css 文件中的图像吗?图像是否应该与我的 bundle.js 一起汇总?我只是不知道如何让他们到 /dist 因为 /dist 文件夹只是 webpack-dev-server 提供的一个虚拟文件夹
2021-06-13 08:59:00

在 scss 文件中使用 background-image: url('./img/background.jpg') 对我有用,没有 url-loader。只有 .png|.jpg|... 等的文件加载器。

OP特别解释说这对他们不起作用
2021-06-01 08:59:00