gpt4 book ai didi

使用 webpack 进行 Angular 9 生产构建

转载 作者:行者123 更新时间:2023-12-02 17:09:16 25 4
gpt4 key购买 nike

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

  1. npm run 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')
})
]
  • 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'
    }
    });

    最佳答案

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

    关于使用 webpack 进行 Angular 9 生产构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60252399/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com