简体   繁体   English

优化 webpack 构建时间

[英]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.文件的编译时间需要 2 分钟或更长时间。

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 1.在 babel-loader 中,属性 cacheDirectory 的选项对象中的文档设置为 true,cacheComprassion 为 false 2. 在 ts-loader 中,属性 transpileOnly 和 happyPackMode 属性的选项对象中的文档中设置为 true 3.dev-禁用工具以获得更好的性能 4. ForkTsCheckerWebpackPlugin 连接到打字稿中的检查类型 5. 代码拆分定制

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.问题出在 eslint-loader-webpack 插件中。 If you install the old version of eslint-loader, then everything works fine.如果你安装了旧版本的 eslint-loader,那么一切正常。

How to solve the issue of the eslint-loader-webpack plugin slow?如何解决eslint-loader-webpack插件慢的问题?

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

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