简体   繁体   中英

Optimizing webpack build time

I have a problem compiling a project after saving a change in the files; the compilation time of the files takes 2 or more minutes.

To fix the problem, I took the following steps:

1.In babel-loader from the documentation in the option object for properties cacheDirectory set to true, cacheComprassion to false 2. In the ts-loader from the documentation in the option object for the properties transpileOnly and happyPackMode set to true 3.dev-tool disabled for better performance 4. ForkTsCheckerWebpackPlugin connected to check types in typescript 5. Code splitting customized

Webpack config file

const path = require('path');
const ESLintPlugin = require('eslint-webpack-plugin');
const webpack = require('webpack');
// eslint-disable-next-line import/no-extraneous-dependencies
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;

module.exports = {
  entry: [
    path.resolve(__dirname, 'src/index.tsx'),
  ],
  mode: 'development',
  module: {
    rules: [
      { parser: { requireEnsure: false } },
      {
        test: /\.(ts|tsx)$/,
        exclude: /(node_modules)/,
        use: [
          {
            loader: 'babel-loader',
            options: {
              cacheDirectory: true,
              cacheCompression: false,
            },
          },
          {
            loader: 'ts-loader', options: {
              transpileOnly: true,
              happyPackMode: true
            },
          },
        ],
      },
      {
        test: /\.scss$/,
        use: [
          {
            // creates style nodes from JS strings
            loader: 'style-loader',
          },
          {
            // translates CSS into CommonJS
            loader: 'css-loader',
          },
          {
            // compiles Sass to CSS
            loader: 'sass-loader',
          },
          {
            loader: 'postcss-loader',
            options: {
              ident: 'postcss',
              plugins: [
                // eslint-disable-next-line global-require
                require('autoprefixer'),
              ],
            },
          },
        ],
      },
      {
        test: /\.less$/,
        use: ExtractTextPlugin.extract({
          fallback: 'style-loader',
          use: ['css-loader', 'less-loader'],
        }),
      },
      {
        test: /\.css$/,
        use: [
          {
            // creates style nodes from JS strings
            loader: 'style-loader',
          },
          {
            // translates CSS into CommonJS
            loader: 'css-loader',
          },
        ],
      },
      {
        test: /\.svg/,
        use: {
          loader: 'svg-url-loader',
        },
      },
      {
        test: /\.(png|jpe?g|gif)$/i,
        use: [
          {
            loader: 'file-loader',
          },
        ],
      },
    ],
  },
  // devtool: 'source-map',
  optimization: {
    runtimeChunk: {
      name: 'app',
    },
    splitChunks: {
      cacheGroups: {
        vendors: {
          test: /[\\/]node_modules[\\/]/,
          name: 'vendors',
          chunks: 'all',
        },
      },
    },
    minimize: true,
  },
  resolve: { extensions: ['*', '.js', '.jsx', '.ts', '.tsx', 'scss'], modules: ['node_modules'] },
  output: {
    // path: `${__dirname}/dist`,
    // filename: 'app.js',
    publicPath: 'http://localhost:3000/hmr/',
    chunkFilename: '[id].js?v=[chunkhash]',
  },
  devServer: {
    stats: {
      // assets: true,
      // cachedAssets: true,
      // performance: true,
      // entrypoints: true,
      // chunkGroups: true,
      // chunks: true,
      // chunkModules: true,
      // show modules contained in each chunk
      // chunkOrigins: true,
      // show the origin of a chunk (why was this chunk created)
      // chunkRelations: true,
      // show relations to other chunks (parents, children, sibilings)
      // dependentModules: true,
    },
    disableHostCheck: true,
    host: '127.0.0.1',
    port: 3000,
    publicPath: '/hmr/',
    filename: 'app.js',
    // hot: true,
    // hotOnly: true,
  },
  plugins: [
    new webpack.HotModuleReplacementPlugin(),
    new ForkTsCheckerWebpackPlugin({
      typescript: {
        diagnosticOptions: {
          semantic: true,
          syntactic: true,
        },
      },
      async: true,
    }),
    new ESLintPlugin({
      eslintPath: 'eslint',
      fix: true,
      quiet: true,
      extensions: ['ts', 'tsx'],
    }),
    new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
  ],
};

Please tell me how you can reduce the compilation time of files in the project after saving the files?

Solved the issue. The problem turned out to be in the eslint-loader-webpack plugin. If you install the old version of eslint-loader, then everything works fine.

How to solve the issue of the eslint-loader-webpack plugin slow?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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