• webpack配置less以及js中引入的图片问题


    1.问题重现

    当我做了这个配置以后,发现less里的图片可以正常展现到页面,但是js里的图片以及其他文件都不能正常展现,都报404
    原始配置如下:

    
    // 如果有額外的.babelrc配置的話就可以使用這段代碼1
    // module.exports = {
    //   module: {
    //     rules: [
    //       {
    //         test:/.jsx?$/,
    //         use: ['babel-loader'],
    //         exclude:/node_modules/  //排除 node_modules目錄
    //       }
    //     ]
    //   }
    // }
    // 如果有額外的.babelrc配置的話就可以使用這段代碼2
    // 在webpack中配置 babel,如果沒有額外的.babelrc配置的話就可以使用這段代碼1
    //webpack.config.js
    // 首先引入插件1
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const isDev = (process.env.NODE_ENV.trim()) === "development"; //html-webpack-plugin 的 config 的妙用4-1
    const { CleanWebpackPlugin } = require('clean-webpack-plugin');//清理dist目錄的插件
    const path = require('path');//設置出口使用
    const config = require('./public/config')[isDev ? 'dev' : 'build'];//html-webpack-plugin 的 config 的妙用4-2
    module.exports = {
      entry: './src/index.js', //webpack的默認配置,也可以寫一個數組
      output: {
        path: path.resolve(__dirname, 'dist'), //必須是絕對路徑
        // filename: 'bundle.js',
        // filename: 'bundle.[hash].js',
        filename: 'bundle.[hash:6].js',//考虑到CDN缓存的问题,我们一般会给文件名加上 hash
        // publicPath: '../' 打包上线之前要改一下这个哦
      },
      mode: isDev ? 'development' : 'production',//html-webpack-plugin 的 config 的妙用4-3
      module: {
          rules: [
              {
                  test: /.jsx?$/,
                  use: {
                      loader: 'babel-loader',
                      options: {
                          presets: ["@babel/preset-env"],
                          plugins: [
                              [
                                  "@babel/plugin-transform-runtime",
                                  {
                                      "corejs": 3
                                  }
                              ]
                          ]
                      }
                  },
                  exclude: /node_modules/
              },
              {
                //看清楚啦  這裡有四個loaderloader 的执行顺序是从右向左执行的,也就是后面的 loader 先执行,上面 loader 的执行顺序为: less-loader ---> postcss-loader ---> css-loader ---> style-loader
                test: /.(le|c)ss$/,
                use: [ 
                  'style-loader', 'css-loader', 
                  {
                    loader: 'postcss-loader',
                    options: {
                      plugins: function () {
                        return [
                          require('autoprefixer')({
                            'overrideBrowserslist':[
                              '>0.25%','not dead'
                            ]
                          })
                        ]
                      }
                    }
                  }, 'less-loader'],
                  exclude: /node_modules/
              },
              {
                test: /.(png|jpg|gif|jpeg|webp|svg|eot|gltf|ttf|woff|woff2)$/,
                use: [
                    {
                        loader: 'url-loader',
                        // options: {
                        //     limit: 10240, //10K
                        //     esModule: false 
                        // }
                        // ,
                        // 使用上面的那一段運行後會把圖片名字改為MD5哈希值,使用下面的會保留原有名稱加上六位哈希值
                        options: {
                          limit: 10240, //10K
                          // publicPath: './src/',
                          esModule: false,
                          name: '[name]_[hash:0].[ext]',
                          outputPath: 'assets' //這個可以將打包後的資源放到指定的文件夾下
                      }
                    }
                ],
                exclude: /node_modules/
              }
              // {
              //   test: /.html$/,
              //   use: 'html-withimg-loader'
              // },
          ]
      },
      plugins: [
        // 數組,放著所有的webpack插件
        new HtmlWebpackPlugin({
          template: './public/index.html',
          filename: 'index.html',
          config: config.template, //html-webpack-plugin 的 config 的妙用4-4
          minify: {
            removeAttributeQuotes: false ,//是否刪除屬性的雙引號
            collapseWhitespace: false, //是否折疊空白
          },
          hash: true //是否加上hash,默認是false
        }),
        new CleanWebpackPlugin(), //清理dist目錄插件,不需要傳參數,它自己可以找到outPath
        // new CleanWebpackPlugin({cleanOnceBeforeBuildPatterns:['**/*','!dll','!dll/**']}) //如果你有需要不刪除dll目錄下的文件的話可以這樣子寫
      ],
      devServer: {
        port: '8080', //默認是8080
        quiet: false, //默認不啟動
        inline: true, // 默認開啟inline 模式,如果設置為false, 開啟 iframe模式
        stats: 'errors-only', //終端僅僅打印 error
        overlay: false, //默認不啟用
        clientLogLevel: 'silent', //日誌等級
        compress: true //是否啟用gzip壓縮
      },
      devtool: 'cheap-module-eval-source-map' //开发环境下使用
    }
    
    // 在webpack中配置 babel,如果沒有額外的.babelrc配置的話就可以使用這段代碼2
    

    index.less 图片可以正常显示到页面

    @color: red;
    body{
      div{
        color: @color;
        transition: all 2s;
      }
      background: url('./assets/img/mya.png');
      .panel {
        border: 0;
         400px;
        font-size: 30px;
        line-height: 31px;
        text-indent: 20px;
      }
      body,#webglCanvas {
         100%;
        height: 100vh;
        overflow: hidden;
      }
    }
    

    js里的写法如下

     const { texture: texture5, mesh: mesh5 } = await aaaaaa(
        { url: '../assets/img/testImg/testpng/color2.png' },
        [[-1500, -5, 1500], [900, -5, -400]]
      );
    

    解决方案如下:

    1.执行命令npm i copy-webpack-plugin --save
    这里需要注意的是: 这个包存在兼容问题,可能会报错:compilation.getCache is not a function,如果报错就换个版本就行了,尝试执行npm i copy-webpack-plugin@6.0.2 --save
    2.进入webpack.config.js里,添加如下代码

    
    const CopyWebpackPlugin = require('copy-webpack-plugin');
    new CopyWebpackPlugin({
          patterns: [
            {
              from: 'src/assets/',
              to: 'assets/'
            },
          ],
        })
    
    

    重新启动,OK啦~~

  • 相关阅读:
    特征的处理
    Pandas读取文件
    标准化数据-StandardScaler
    hibernate 继承映射
    hibernate 多对多关联映射
    hibernate 一对一关联映射
    hibernate 一对多 单双向关联
    hibernate配置文件
    spring整合struts2
    AWS云教育账号创建以及搭建数据库
  • 原文地址:https://www.cnblogs.com/sugartang/p/14324164.html
Copyright © 2020-2023  润新知