简体   繁体   English

由 mini-css-extract-plugin 生成的大型控制台输出

[英]Large console output produced by mini-css-extract-plugin

Been trying to research this but it doesn't seem as if any else has this, or see this as an issue.一直在尝试研究这个,但似乎没有其他人有这个,或者认为这是一个问题。

I am using mini-css-extract-plugin ( MiniCssExtractPlugin ) in my webpack.config.js .我使用的mini-css-extract-pluginMiniCssExtractPlugin我) webpack.config.js

However, when I run webpack the console is littered with hundreds of instances of something similar to this...但是,当我运行webpack ,控制台上散落着数百个与此类似的实例...

Child mini-css-extract-plugin ../../../node_modules/css-loader/index.js??ref--6-1!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/sass-loader/lib/loader.js!ui/radiolist-toggler/RadioListToggler.scss:
    Entrypoint mini-css-extract-plugin = *
    [../../../node_modules/css-loader/index.js?!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/sass-loader/lib/loader.js!./ui/radiolist-toggler/RadioListToggler.scss] /Users/~~~/git/user-section/node_modules/css-loader??ref--6-1!/Users/~~~/git/user-section/node_modules/postcss-loader/src!/Users/~~/git/user-section/node_modules/sass-loader/lib/loader.js!./ui/radiolist-toggler/RadioListToggler.scss 5.33 KiB {mini-css-extract-plugin} [built]
        + 1 hidden module

I need to scroll up for a good few seconds to be able to see all my assets etc.我需要向上滚动几秒钟才能看到我的所有资产等。

I am pretty new to webpack, so not exactly sure how to prevent this from being output to the console?我对 webpack 很陌生,所以不确定如何防止它输出到控制台?

Below is my webpack.config.js下面是我的webpack.config.js

const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const OptimizeCssAssetsPlugin = require("optimize-css-assets-webpack-plugin");
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const modernizr = require("modernizr");
const CopyWebpackPlugin = require('copy-webpack-plugin');
const CompressionPlugin = require('compression-webpack-plugin');


module.exports = {
  context: path.resolve(__dirname, 'src/main/client'),
  entry: './index',
  devtool: 'cheap-module-source-map',
  optimization: {
    minimizer: [
      new UglifyJsPlugin({
        cache: true,
        parallel: true,
        uglifyOptions: {
          mangle: true,
          compress: true,
          ecma: 6
        },
        sourceMap: true
      }),
      new OptimizeCssAssetsPlugin({}),
    ],
    splitChunks: {
      chunks: 'all'
    }
  },
  plugins: [
    new CompressionPlugin({
      test: /\.js$|\.css$|\.html$|\.(png|svg|jpg|gif)$/,
      cache: true,
      filename: '[path].gz[query]',
      algorithm: 'gzip',
      threshold: 10240
    }),
    new CleanWebpackPlugin([
      './target/webapp'
    ]),
    new HtmlWebpackPlugin({
      template: './index.html',
      filename: '../index.html',
      xhtml: true
    }),
    new MiniCssExtractPlugin({
      filename: "[name].css",
    }),
    new CopyWebpackPlugin([{
      from: '../webapp/**/*',
      to: '../'
    }]),
    new webpack.DefinePlugin({
      'process.env.NODE_ENV': '"production"'
    }),
  ],
  output: {
    publicPath: '/app/',
    filename: '[name].bundle.js',
    chunkFilename: '[id].js',
    path: path.resolve(__dirname, 'target/webapp/app/')
  },
  module: {
    rules: [{
        loader: "webpack-modernizr-loader",
        test: /\.modernizrrc\.js$/
      },
      {
        test: /\.html$/,
        exclude: /node_modules/,
        use: {
          loader: 'html-loader'
        }
      },
      {
        test: /\.s?css$/,
        use: [
          MiniCssExtractPlugin.loader,
          {
            loader: 'css-loader',
            options: {
              importLoaders: 1
            }
          },
          {
            loader: 'postcss-loader'
          },
          {
            loader: 'sass-loader'
          }
        ]
      },
      {
        test: /\.(png|svg|jpg|gif)$/,
        use: [
          'file-loader'
        ]
      },
      {
        test: /\.(woff|woff2|eot|ttf|otf)$/,
        use: [{
          loader: 'file-loader',
          options: {
            name: '[name].[ext]',
            outputPath: './assets/fonts/'
          }
        }]
      },
      {
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        loader: "babel-loader",
        options: {
          presets: ["@babel/env"]
        }
      }
    ],
  },
  resolve: {
    alias: {
      // You can add comment "Please do not delete this file" in this file
      modernizr$: path.resolve(__dirname, "./.modernizrrc.js")
    }
  }
}

@mcclosa mentioned this as a comment but in case anyone should look at this question, see no answer and click away, the solution is to add the stats option to your webpack.config.js file as follows: @mcclosa 将此作为评论提及,但如果有人应该查看此问题,看不到答案并单击离开,解决方案是将stats选项添加到您的webpack.config.js文件中,如下所示:

module.exports = {
   stats: { children: false },
}

The above option uses the children: false option suggested by @mcclosa, which does successfully remove the junk output by mini-css-extract-plugin, but I find using the preset stats: "minimal" produces a much nicer overall output.上面的选项使用了 @mcclosa 建议的children: false选项,它确实成功地删除了 mini-css-extract-plugin 的垃圾输出,但我发现使用预设的stats: "minimal"会产生更好的整体输出。 Using:使用:

module.exports = {
   stats: "minimal",
}

..gives me the following tiny output whenever my build has no errors: ..只要我的构建没有错误,就会给我以下微小的输出:

i 「wdm」: Compiling...
i 「wdm」:    69 modules
i 「wdm」: Compiled successfully.

..as opposed to dozens of lines of useless build data, but it will continue to give give error information when errors are present. ..与几十行无用的构建数据相反,但当出现错误时,它会继续给出错误信息。

Unfortunately, mini-css-extract-loader does not have a setting to control the verbosity of its log output.不幸的是,mini-css-extract-loader 没有设置来控制其日志输出的详细程度。

Setting stats.children to false or "minimal" in your webpack.config.js can remove a lot of other useful output like your bundle names and sizes, entry point information, time taken to build, legitimate warnings and errors from other plugins that you may want to keep, etc.设置stats.childrenfalse"minimal"webpack.config.js可以免去很多其他有用的输出的喜欢你的包名称和大小,入口点信息,花费时间来构建,从其他插件合法的警告和错误,你可能想保留等。

Instead it seems that we must add a plugin that executes on the compiler's done hook to remove items from the stats.compilation object associated with mini-css-extract-plugin.相反,我们似乎必须添加一个在编译器的done挂钩上执行的插件,以从与 mini-css-extract-plugin 关联的stats.compilation对象中删除项目。

This example plugin should work:这个示例插件应该可以工作:

class CleanupMiniCssExtractPlugin {
  apply(compiler) {
    compiler.hooks.done.tap("CleanupMiniCssExtractPlugin", stats => {
      if (this._children) {
        const children = stats.compilation.children;
        if (Array.isArray(children)) {
          stats.compilation.children = children.filter(
            child => child.name.indexOf("mini-css-extract-plugin") == -1
          );
        }
      }
    });
  }
}

Or you can use this npm package: https://www.npmjs.com/package/cleanup-mini-css-extract-plugin或者你可以使用这个 npm 包: https ://www.npmjs.com/package/cleanup-mini-css-extract-plugin

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM