AOT: ngtools/webpack + 延迟加载不起作用。使用:Angular 4,webpack 3

AOT: ngtools/webpack + lazy loading does not work. Using: Angular 4, webpack 3

我尝试使用 ngtools/webpack 进行 AOT 编译。在我尝试创建延迟加载的路由之前,它工作正常。我得到的错误 - Error: Cannot find module './components/dashboard/dashboard.module.ngfactory'.。在 dist 文件夹中,我还缺少用于延迟加载包的块。

我不知道我做错了什么,我花了很多时间来解决这个问题。我在 this repo 中创建了一个简单的项目 tour of heroes,但出现了上述错误。回购中的分支是 angular-aot-refactor。当您到达应用程序的根目录时 - 只需 npm installnpm run dev:aot.

问题是 - 我做错了什么导致延迟加载不起作用?

在此先感谢您的帮助!

你的问题是the following code:

new webpack.ContextReplacementPlugin(
    // The (\|\/) piece accounts for path separators in *nix and Windows
    /angular(\|\/)core(\|\/)@angular/,
    helpers.root('./src'), // location of your src
    {} // a map of your routes
),

要理解为什么这个插件在构建 aot 时会导致问题,您应该知道@angular/cli 是如何产生延迟加载模块的。这是一个非常复杂的过程。但这里的关键点是它 relies@angular/core/src/linker 路径上。

由于您要替换该路径,因此不会生成延迟加载模块的映射(angular/cli uses ContextElementDependency)。

因此请尝试为生产版本禁用 ContextReplacementPlugin

P.S。事实证明这是一个众所周知的问题: