Webpack忽略了stats选项。

4

更新

@Daniel Khoroshko的回答解决了我的统计问题。作为参考,webpack可以(至少)有四种方法处理stats:

  1. stats当作常规webpack选项https://webpack.js.org/configuration/stats/
  2. 如果使用devServer,则必须将其放置在该对象中(请参见上面链接中的注意事项)
  3. 如果使用Node API,则必须在回调函数中使用https://webpack.js.org/api/node/#stats-object
  4. 如Daniel所指出,webpack-dev-middleware会覆盖stats,因此对象必须在其中https://github.com/webpack/webpack-dev-middleware#stats

================================================

我正在尝试抑制我得到的数百万条extract-text-webpack-plugin日志,使用webpack 3.10。

我们正在使用webpack Node API。在我们的node入口点server.js中,我们有如下内容:

// server.js

const app = express();

if (environment.isLocal) {
  require('./webpackConfig')(app);
} else {
  app.use(compression());
}
// other stuff

我们在哪里使用带有Node的webpack:

// webpackConfig.js

const webpack = require('webpack');
const config = require('../webpack.config.dev');

module.exports = (app) => {
  const compiler = webpack(config, (err, stats) => {
    stats.toJson("none"); // none for brevity, but not working
  });

  app.use(require('webpack-dev-middleware')(compiler, {
    noInfo: true,
    publicPath: config.output.publicPath
  }));

  app.use(require('webpack-hot-middleware')(compiler));
};

最后,整个配置
// webpack.config.dev.js

module.exports = {
  devtool: 'cheap-module-source-map',
  entry: {
    app: [
      'eventsource-polyfill',
      'webpack-hot-middleware/client?reload=true',
      './src/index'
    ]
  },
  target: 'web',
  output: {
    path: __dirname + '/dist',
    publicPath: '/',
    filename: '[name].js'
  },
  devServer: {
    contentBase: './src'
  },
  plugins: [
    new webpack.HotModuleReplacementPlugin(),
    new webpack.NoEmitOnErrorsPlugin(),
    new ExtractTextPlugin('[name]-[hash].css'),
    new HtmlWebpackPlugin({
      title: 'annoying webpack', 
      template: './src/index.html', 
      alwaysWriteToDisk: true,
      inject: false
    }),
    new HtmlWebpackHarddiskPlugin()
  ],
  module: {
    rules: [
      {
        test: /\.js$/,
        enforce: 'pre',
        loader: require.resolve('eslint-loader'),
        options: {
          failOnWarning: false,
          failOnError: false
        },
        exclude: /node_modules|dist/
      },
      {
        test: /\.js$/,
        include: [path.join(__dirname, 'src')]
        loader: 'babel-loader'
      }
    ]
  }
};

在控制台中输出

webpack building...
webpack built c22fd3ae797ecd55eccc in 7410ms
ℹ 「wdm」: Hash: c22fd3ae797ecd55eccc
Version: webpack 3.10.0
Time: 7410ms
                       Asset       Size  Chunks                    
Chunk Names
                      app.js    2.53 MB       0  [emitted]  [big]  
app
app-c22fd3ae797ecd55eccc.css     125 kB       0  [emitted]         
app
                  app.js.map    2.97 MB       0  [emitted]         
app
app-c22fd3ae797ecd55eccc.css.map    4.71 kB       0  [emitted]         
app
                  index.html  275 bytes          [emitted]
   [3] ./node_modules/react/react.js 56 bytes {0} {0} [built]
 [100] ./node_modules/react-dom/index.js 59 bytes {0} {0} [built]
 [107] ./node_modules/react-redux/es/index.js 230 bytes {0} {0} 
[built]
   ..... 
    + 867 hidden modules
    Child html-webpack-plugin for "index.html":
         Asset    Size  Chunks  Chunk Names
    index.html  568 kB       0
    .....   
ℹ 「wdm」: Compiled successfully.
webpack built d7509fff9f1c995bf5ee in 7523ms
ℹ 「wdm」: Hash: d7509fff9f1c995bf5ee
Version: webpack 3.10.0
Time: 7523ms
                       Asset       Size  Chunks                    
Chunk Names
                      app.js    2.53 MB       0  [emitted]  [big]  
app
app-d7509fff9f1c995bf5ee.css     125 kB       0  [emitted]         
app
                  app.js.map    2.97 MB       0  [emitted]         
app
app-d7509fff9f1c995bf5ee.css.map    4.71 kB       0  [emitted]         
app
                  index.html  275 bytes          [emitted]
   [5] ./src/App.js 3.62 kB [built]
   [6] ./src/store/configureStore.js 325 bytes [built]
   .....
    + 867 hidden modules
Child html-webpack-plugin for "index.html":
     Asset    Size  Chunks  Chunk Names
index.html  568 kB       0
   [0] ./node_modules/html-webpack-plugin/lib/loader.js!./src/index.html 646 bytes {0} [built]
   [1] ./node_modules/lodash/lodash.js 540 kB {0} [built]
   [2] (webpack)/buildin/global.js 509 bytes {0} [built]
   [3] (webpack)/buildin/module.js 517 bytes {0} [built]
ℹ 「wdm」: Compiled successfully.
1个回答

6
关于统计选项,webpack-dev-middlewarewebpack-dev-server都有自己的统计设置,我认为这会覆盖 webpack 自己的设置。建议尝试这样做。
  app.use(require('webpack-dev-middleware')(compiler, {
    noInfo: true,
    publicPath: config.output.publicPath,
    stats: 'errors-only'
  }));

很遗憾,我不知道为什么它会构建两次 :-( - Daniel Khoroshko
非常感谢您修复了统计数据!它起作用了。我将编辑我的问题以突出显示该修复。 - Monti
嗨,我很高兴它能正常工作。说到双重构建 - 如果你在webpack配置文件中的导入后面添加console.log('test'),它会打印两次吗? - Daniel Khoroshko
1
我其实不确定我改了什么,但现在它不再重复构建了。我基本上从我们以前的webpack配置重新开始,然后就搞定了。再次感谢您的帮助。 - Monti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接