Angular 2 AOT和延迟加载,而不使用Angular CLI

Angular 2 AOT和延迟加载,而不使用Angular CLI,angular,lazy-loading,angular2-aot,Angular,Lazy Loading,Angular2 Aot,我使用的是一个非常简单的Angular 2应用程序,我没有使用Angular CLI(出于这个特定问题,请不要建议我使用CLI)。使用JIT编译器时,站点运行时不会出现任何问题。急切加载的模块和延迟加载的模块都很好 我可以成功运行AOT编译器,然后使用Rollup执行树抖动,如中所述。当这样做的时候,站点运行时没有任何问题,但是我在尝试转到急切加载的模块时遇到了一个错误。下面是错误消息:GEThttp://atticus.local/app/contacts/contacts.module.ng

我使用的是一个非常简单的Angular 2应用程序,我没有使用Angular CLI(出于这个特定问题,请不要建议我使用CLI)。使用JIT编译器时,站点运行时不会出现任何问题。急切加载的模块和延迟加载的模块都很好

我可以成功运行AOT编译器,然后使用Rollup执行树抖动,如中所述。当这样做的时候,站点运行时没有任何问题,但是我在尝试转到急切加载的模块时遇到了一个错误。下面是错误消息:
GEThttp://atticus.local/app/contacts/contacts.module.ngfactory 404(未找到)
(这是我试图延迟加载的模块)

首先是一个非常基本的问题:

  • 在进行AOT和树抖动时,使用延迟加载是否有意义?你还有福利吗
假设以上问题的答案是肯定的,我想知道如何让AOT编译和延迟加载一起工作?我在GitHub问题上看到了这一点。这假设您正在使用CLI,而我不是。在运行AOT时的输出中,我确实注意到没有为延迟加载的模块创建
*.ngfactory.ts
*.ngsummary.json
,但只为急切加载的模块创建。这也许有道理

作为参考,我为AOT运行的命令是
ngc-p tsconfig AOT.json
,其中包含以下
tsconfig AOT.json

{
    "compilerOptions": {
        "target": "es5",
        "module": "es2015",
        "moduleResolution": "node",
        "sourceMap": true,
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "lib": [
            "es2015",
            "dom"
        ],
        "noImplicitAny": true,
        "suppressImplicitAnyIndexErrors": true,
        "typeRoots": [
            "node_modules/@types/"
        ]
    },
    "files": [
        "app/app.module.ts",
        "app/main-aot.ts"
    ],
    "angularCompilerOptions": {
        "genDir": "aot",
        "skipMetadataEmit": true
    }
}
然后我运行了
rollup-c rollup config.js
,以便rollup执行树抖动。下面是
汇总配置.js

import rollup from 'rollup'
import nodeResolve from 'rollup-plugin-node-resolve'
import commonjs from 'rollup-plugin-commonjs';
import uglify from 'rollup-plugin-uglify'

//paths are relative to the execution path
export default {
    entry: 'app/main-aot.js',
    dest: 'aot/dist/build.js', // output a single application bundle
    sourceMap: true,
    sourceMapFile: 'aot/dist/build.js.map',
    format: 'iife',
    plugins: [
        nodeResolve({ jsnext: true, module: true }),
        commonjs({
            include: ['node_modules/rxjs/**']
        }),
        uglify()
    ]
}

请让我知道,如果我可以提供更多的信息或更清楚。谢谢大家!

汇总还不支持代码拆分。这是github的一个问题

您可以通过使用webpack实现这一点。它支持代码拆分、延迟加载和树生成

在进行AOT和树抖动时,使用延迟加载是否有意义?你还有福利吗

为什么不呢?您仍然可以减少应用程序的启动时间,因为只需加载第一个模块。但是,您可以使用正确的预加载策略自动加载其他文件

费边