【问题标题】:Angular 8 with Webpack 3.7 extremely slow to render带有 Webpack 3.7 的 Angular 8 渲染速度极慢
【发布时间】:2020-01-13 13:53:54
【问题描述】:

渲染(刷新)需要 35 秒或从启动 Webpack 开始需要 1.15 秒以上。

我尝试过优化 Webpack,启动它的速度更快,但大部分时间发生在加载 main.js 并对其进行处理之后。

我做了一个配置文件,但无法弄清楚需要这么长时间的部分。

如何加快开发速度?每个文件更改都需要我们 35-60 秒来预览和测试。

    {
  "name": "....",
  "version": "0.0.0",
  "scripts": {
    "start": "webpack-dev-server --env.NODE_ENV=development --https --mode development --open",
    "start:prod": "webpack-dev-server --env.NODE_ENV=production --https --open"
  },
  "private": true,
  "dependencies": {
    "@angular/common": "^8.1.3",
    "@angular/compiler": "^8.1.3",
    "@angular/core": "^8.1.3",
    "@angular/fire": "^5.2.1",
    "@angular/forms": "^8.1.3",
    "@angular/platform-browser": "^8.1.3",
    "@angular/platform-browser-dynamic": "^8.1.3",
    "@angular/router": "^8.2.0",
    "@types/google.analytics": "0.0.40",
    "angular-svg-icon": "^7.2.1",
    "cross-env": "^5.2.0",
    "crypto-js": "^3.1.9-1",
    "dotenv": "^8.1.0",
    "firebase": "^6.3.4",
    "google-libphonenumber": "^3.0.9",
    "hammerjs": "^2.0.8",
    "ngx-international-phone-number": "^1.0.4",
    "ngx-swiper-wrapper": "^8.0.2",
    "rxjs": "~6.4.0",
    "rxjs-compat": "^6.5.2",
    "sass-resources-loader": "^2.0.1",
    "tslib": "^1.9.0",
    "zone.js": "~0.9.1"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "^0.801.3",
    "@angular/animations": "^8.2.0",
    "@angular/cdk": "^8.1.2",
    "@angular/cli": "^8.2.1",
    "@angular/compiler-cli": "^8.1.3",
    "@angular/language-service": "^8.1.3",
    "@angular/material": "^8.1.2",
    "@types/jasmine": "^3.3.16",
    "@types/jasminewd2": "~2.0.3",
    "@types/node": "^11.13.20",
    "angular2-template-loader": "^0.6.2",
    "codelyzer": "^5.0.0",
    "html-webpack-plugin": "^3.2.0",
    "jasmine-core": "~3.4.0",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~4.1.0",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "^2.0.6",
    "karma-jasmine": "~2.0.1",
    "karma-jasmine-html-reporter": "^1.4.0",
    "moment": "^2.24.0",
    "ngx-daterangepicker-material": "^2.1.8",
    "node-sass": "^4.12.0",
    "protractor": "~5.4.0",
    "raw-loader": "^1.0.0",
    "sass-loader": "^7.1.0",
    "ts-loader": "^5.4.5",
    "ts-node": "~7.0.0",
    "tslint": "~5.15.0",
    "typescript": "3.4.5",
    "webpack": "^4.39.1",
    "webpack-cli": "^3.3.6",
    "webpack-dev-server": "^3.7.2"
  }
}

Webpack 配置

const HtmlWebpackPlugin = require('html-webpack-plugin');
const path = require('path');
const webpack = require('webpack');

module.exports = env => {
  return {
    entry: './src/main.ts',
    resolve: {
      extensions: ['.ts', '.js'],
      alias: {
        styles: path.resolve(__dirname, '../src/styles')
      }
    },
    output: {
      pathinfo: false
    },
    devServer: {
      historyApiFallback: true
    },
    optimization: {
      removeAvailableModules: false,
      removeEmptyChunks: false,
      splitChunks: false
    },
    module: {
      rules: [
        {
          test: /\.ts$/,
          use: ['ts-loader', 'angular2-template-loader']
        },
        {
          test: /\.html$/,
          use: 'raw-loader'
        },
        {
          test: /\.scss$/,
          loader: ["raw-loader", "sass-loader", {
            loader: 'sass-resources-loader',
            options: {
              resources: ['./src/styles.scss']
            },
          }]
        },
        {
          // Hide import warnings
          test: /[\/\\]@angular[\/\\]core[\/\\].+\.js$/,
          parser: {system: true},
        },
      ]
    },
    plugins: [
      new HtmlWebpackPlugin({template: './src/index.html'}),
      new webpack.DefinePlugin({"process.env.NODE_ENV": JSON.stringify(env.NODE_ENV)})
    ]
  }
}

【问题讨论】:

  • 您是否尝试过在每个规则中使用exclude: /node_modules/ 配置设置?我感觉你的 ts 规则在你的捆绑 js 中包含了一堆(如果不是全部 node_modules)。
  • @DevinOlsen 因此添加排除项确实减少了 10% 的实际构建时间......但显然问题出在其他地方。我在原帖中添加了更多细节,因为我认为问题出在其他地方。
  • @smorhaim 你也可以投票赞成我的答案吗?这对我有很大帮助。谢谢

标签: javascript node.js angular typescript webpack


【解决方案1】:

对于这条规则

{
  test: /\.ts$/,
  use: ['ts-loader', 'angular2-template-loader']
},

你需要添加 exclude 来排除 node_modules 包

{
  test: /\.ts$/,
  exclude: /node_modules/,
  use: ['ts-loader', 'angular2-template-loader']
},

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 2015-05-23
    • 1970-01-01
    相关资源
    最近更新 更多