使用webpack的Angular 9生产版本

时间:2020-02-16 19:32:14

标签: angular webpack

我有一个Angular应用程序,我会定期使用最新的Webpack捆绑程序进行更新和构建。
几天前,我将该项目升级到Angular 9,遇到了一些我无法解决的问题。

  1. npm运行build:prod
    错误TS2307:找不到模块'./app/app.module.ngfactory'。
    我认为这是由于webpack配置的这一部分引起的,因为模块导入已在Angular 9中更改。但是,我对此不太确定。
  plugins: [
    new ngw.AngularCompilerPlugin({
      tsConfigPath: path.resolve(rootPath, 'tsconfig.aot.json'),
      entryModule: path.resolve(rootPath, 'src', 'app', 'app.module#AppModule')
    })
  ]
  1. npm运行测试
    找不到文件:./node_modules/jest-preset-angular/InlineHtmlStripStylesTransformer(解析为:... / angular-webpack-build / node_modules / jest-preset-angular / InlineHtmlStripStylesTransformer)
    这个错误对我来说有点神秘。我读过一些有关类似问题的文章,但是这些建议没有用。

下面您可以找到我的配置文件,但是整个项目都可以在GitHub上找到:https://github.com/aszidien/angular-webpack-build

package.json

...
  "scripts": {
    "build:dev": "cross-env NODE_ENV=development webpack --mode development",
    "build:prod": "cross-env NODE_ENV=production webpack --mode production",
    "test": "jest"
  }
...

tsconfig.aot.json

{
  "compilerOptions": {
    "module": "es2015",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2018",
      "dom"
    ]
  },
  "angularCompilerOptions": {
    "skipMetadataEmit": true
  }
}

webpack.config.common.js

const webpackMerge = require('webpack-merge');

const commonConfig = require('./webpack.config.common');

module.exports = webpackMerge(commonConfig, {
  devtool: 'cheap-module-eval-source-map',
  output: {
    publicPath: '/',
    filename: 'bundle.js',
    chunkFilename: '[id].chunk.js'
  },
  module: {
    rules: [
      {
        test: /\.ts$/,
        use: [
          {
            loader: 'awesome-typescript-loader', options: {
              transpileOnly: true
            }
          },
          { loader: 'angular2-template-loader' },
          { loader: 'angular-router-loader' }
        ]
      }
    ]
  },
  devServer: {
    historyApiFallback: true,
    stats: 'minimal'
  }
});

webpack.config.prod.js

const webpackMerge = require('webpack-merge');

const commonConfig = require('./webpack.config.common');

module.exports = webpackMerge(commonConfig, {
  devtool: 'cheap-module-eval-source-map',
  output: {
    publicPath: '/',
    filename: 'bundle.js',
    chunkFilename: '[id].chunk.js'
  },
  module: {
    rules: [
      {
        test: /\.ts$/,
        use: [
          {
            loader: 'awesome-typescript-loader', options: {
              transpileOnly: true
            }
          },
          { loader: 'angular2-template-loader' },
          { loader: 'angular-router-loader' }
        ]
      }
    ]
  },
  devServer: {
    historyApiFallback: true,
    stats: 'minimal'
  }
});

2 个答案:

答案 0 :(得分:0)

  1. 在具有Ivy的Angular 9中,不再有ngfactory文件,您应该删除main-aot.ts文件

答案 1 :(得分:0)

我有类似问题,但使用Angular Universal和webpack。 我准备了一些示例的仓库:https://github.com/MDzyga/universal