webpack插件extract-text-webpack-plugin抽取css后,图片路径出现问题?

发布于 2022-09-06 11:36:33 字数 4482 浏览 27 评论 0

打包后的目录结构

│  .babelrc
│  index.html
│  list.txt
│  package-lock.json
│  package.json
│  webpack.config.js
│  
├─dist
│  │  index.html
│  │  
│  ├─css
│  │      main.css
│  │      
│  ├─images
│  │      holder.jpg
│  │      
│  └─js
│          main.bundle.js
│          
└─src
    │  app.js
    │  
    ├─assets
    │      car2.jpg
    │      holder.jpg
    │      
    └─components
            test.css
            test.js

webpack配置文件(版本是^3.8.1)

const path = require('path');
const webpack = require('webpack');
const htmlWebpackPlugin = require('html-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const Build_Path = path.resolve(__dirname,'dist');

const BuildConfig = {
    entry: './src/app.js',
    output: {
        path: Build_Path,
        filename: 'js/[name].bundle.js'
    },
    module:{
        rules: [
            { test: /\.js$/, exclude: /node_modules/, loader: "babel-loader" },
              {
                  test: /\.css$/,
                  use: ExtractTextPlugin.extract({
                      fallback: 'style-loader',
                      use: [
                          {
                              loader: 'css-loader',
                              options: {
                                  importLoaders: 1
                              }
                          },
                          {
                              loader: 'postcss-loader',
                              options: {
                                  ident: 'postcss',
                                  plugins: (loader) => [
                                      require('autoprefixer')(),
                                      require('cssnano')()
                                  ]
                              }
                          }
                      ]
                  })
              },
              {
                  test: /\.less$/i,
                  use: ExtractTextPlugin.extract({
                      fallback: 'style-loader',
                      use: [
                          'css-loader',
                          {
                              loader: 'postcss-loader',
                              options: {
                                  ident: 'postcss',
                                  plugins: (loader) => [
                                      require('autoprefixer')(),
                                      require('cssnano')()
                                  ]
                              }
                          },
                          'less-loader'
                      ]
                  })
              },
              {
                  test: /\.(png|jpg|gif|svg)$/i,
                  loader: 'file-loader',
                  options:{
                      name: 'images/[name].[ext]'
                  }
              }
        ]
    },
    plugins:[
        new CleanWebpackPlugin([Build_Path],{verbose:false}),
        new htmlWebpackPlugin({
            filename: 'index.html',
            template: 'index.html',
            inject: 'body'
        }),
        new ExtractTextPlugin('css/[name].css')
    ]
};

module.exports = BuildConfig;

html文件

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="renderer" content="webkit">
</head>
<body>
    <div class="wrapper">
        <img src="src/assets/car2.jpg" alt="">
        <div class="box">
            <p>1</p>
            <div class="imgbg"></div>
        </div>
    </div>
</body>
</html>
  • 如上图的打包后的目录结构是我想要的,css/js/images/分别打包出一个对应的文件夹

  • index.html模板文件下有直接引入图片,在css文件中也有用相对路径写出背景图片

问题

  • 如果不用extract-text-webpack-plugin提取css出来,是没有问题的,所以我猜测问题是出在这个插件上,也看到sf上有网友提出这个问题,但是没有很好的解决方案

  • 在查找答案的过程中,有说修改output.publicPath的,也有说在插件下添加options.publicPath的,还有说修改file-loader.options.publicPath,我都有测试,可能是测试的方法不对,都没有达到我想要的效果。

  • 倒是修改file-loader下的name,把images/[name].[ext]改成[name].[ext]就可以,但是不能把图片放在dist/images文件夹下

所以希望各位大神能帮忙解决这个问题,在这里先谢过了!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

颜漓半夏 2022-09-13 11:36:33

修改rules加载器中的publicPath路径,
use: ExtractTextPlugin.extract({

            fallback: "style-loader",
            use: [{
                loader: 'css-loader',
                options: {
                    minimize: true //css压缩
                }
            }, 'postcss-loader'],
            publicPath: '../'
        })
娇纵 2022-09-13 11:36:33

使用 copy-webpack-plugin 这个插件

npm install copy-webpack-plugin --save-dev

const CopyWebpackPlugin = require('copy-webpack-plugin'); 

 plugins: [
    new CopyWebpackPlugin([
      {
        from: "./src/assets",
        to: resolve("dist/images")
      }
    ])
    
    
 ]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文