- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Angular 2 中配置子模块以使其在 AOT 和汇总后工作的正确方法是什么?我不关心延迟加载并且很乐意将所有子模块捆绑在一起,但是 loadChildren
是引用子模块并让它使用正确的 <router-outlet>
的最干净的方式,虽然我尝试了各种方法,但没有一种方法既适用于开发又适用于生产。
我按照 AOT cookbook 中的说明进行操作准备我的应用程序进行部署。我的模块结构是 root > account > admin,我希望 admin 路由加载到 account 组件定义的导出中。
这是帐户模块的路由器配置:
import { NgModule } from '@angular/core';
import { AdminModule } from './admin/admin.module';
const accountRoutes: Routes = [{
path: 'account',
component: AccountComponent,
children: [
{ path: 'setup', component: SetupComponent },
{ path: 'admin', loadChildren: () => AdminModule }
]
}];
这在开发中有效,但 NGC 编译失败并显示 Error: Error encountered resolving symbol values statically. Reference to a local (non-exported) symbol 'accountRoutes'.
我添加了一个导出到 accountRoutes
但这也无法用 Error: Error encountered resolving symbol values statically. Function calls are not supported.
编译.
一个建议是使用字符串而不是函数,以便 NGC 可以编译代码:
loadChildren: 'app/account/admin/admin.module#AdminModule'
这在开发中有效并成功编译,但编译后的应用程序将无法运行,因为 SystemJS 不可用。错误是:
ERROR Error: Uncaught (in promise): TypeError: System.import is not a function
TypeError: System.import is not a function
at t.loadFactory (build.js:6)
at t.load (build.js:6)
at t.loadModuleFactory (build.js:12)
我尝试在生产构建中包含 SystemJS,但找不到单独的模块文件 app/account/admin/admin.module.ngfactory
- 汇总后所有内容都在一个 build.js 中。可能有一种方法可以让单独的汇总构建每个子模块,但这需要大量工作。
我找到了引用导出函数的建议:
export function loadAdminModule() {
return AdminModule;
}
loadChildren: loadAdminModule
这在开发中有效,但在生产中运行时编译器不可用,因此它记录 build.js:1 ERROR Error: Uncaught (in promise): Error: Runtime compiler is not loaded
.
可以修改辅助函数,使其在生产环境中通过引用 NgFactory 而工作,但这在开发环境中不起作用。
import { AdminModuleNgFactory } from '../../../aot/src/app/account/admin/admin.module.ngfactory';
export function loadAdminModule() {
return AdminModuleNgFactory;
}
loadChildren: loadAdminModule
是否有支持的方式使用 loadChildren
以便它可以按照 AOT 食谱中的说明使用?是不是改用 webpack 更好?
最佳答案
对于遇到相同问题的任何人,这是我正在使用的临时解决方法。希望很快会出现更好的答案。
我现在在专用文件 submodules.ts
中定义我的子模块。我有这个文件的两个版本,submodules-jit.ts
用于开发,submodules-aot.ts
用于 AOT/rollup 部署到生产。我 gitignore submodules.ts
并已将命令添加到我的 npm start
和 npm build:aot
脚本中以替换正确的脚本。
// submodules-jit.ts
import { AdminModule } from './account/admin/admin.module'
export function adminModule(): any { return AdminModule; }
// submodules-aot.ts
import { AdminModuleNgFactory } from '../../aot/src/app/account/admin/admin.module.ngfactory'
import { AdminModule } from './account/admin/admin.module'
export function adminModule(): any { return AdminModuleNgFactory; }
export function adminModuleKeep(): any { return AdminModule; }
AdminModule 必须在 AOT 文件中引用,以便保留。
然后我在我的路由中使用 adminModule
函数:
import { adminModule } from '../submodules'
{ path: 'admin', loadChildren: adminModule }
最后,为了方便起见,npm 脚本放入了正确的文件。
"build:aot": "cp src/submodules-aot.ts src/app/submodules.ts && ngc -p tsconfig-aot.json && rollup -c rollup-config.js",
"start": "cp src/submodules-jit.ts src/app/submodules.ts && concurrently \"npm run build:watch\" \"npm run serve\""
不用说这是一个可怕的 hack,但它保持了路由文件的清洁,并将大部分恶意内容集中在一个地方。
关于angular2-routing - 使用 AOT 和 Rollup 的 Angular 2 子模块路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43674436/
我正在尝试从 Unity 发布到我的 iPhone 4s。构建成功,但我继续收到此消息: “在 aot-only 模式下运行时无法加载 AOT 模块‘Assembly-CSharp’,因为依赖项无法找
在听说了这么多有关 Angular AOT 模式的信息后,我想尝试一下。因此,我们将应用程序迁移到 Angular v4.1.2,并进行了所有必要的更改。当我尝试使用我的 webpack 配置文件中的
我有一个 C# 项目,我需要将其编译为 native 二进制文件。我在这里读过: http://www.mono-project.com/AOT Mono 可以将程序集预编译为两个选项之一: --ao
我搜索了很多关于这种伟大语言的信息,并在此页面上找到了自己 https://github.com/dart-lang/sdk/wiki/Snapshots但它没有回答一些问题: 快照和 AOT 有什么
我知道什么是字节码检测。它只是在运行时更改 .class 文件字节码,这似乎从 JDK 1.5 开始可用。但是,据说是在类加载期间而不是运行时。 现在我的问题是,什么是 AOT 或提前检测?相反的程序
我正在为我的应用程序构建一个插件系统。我读到任何人都可以反编译 .class 文件,因此我不得不使用 Ahead-Of-Time 编译器(对吗?)。问题是我需要动态加载一些插件类。现在,我正在将所有
我的问题是 Angular 模块之一无法在 Safari 浏览器中正常工作。 我有以下代码: @NgModule({ bootstrap: [ AppComponent ], impo
我在这里问是因为我无法在网上找到完整的文档。示例 here太简单了。我有一个包含多个组件和一些模块的应用程序。用ngc编译后,我有很多错误。我发现修复它们的方法是使用相对路径。因此,我在所有组件中都使
在使用 webpack 进行 AOT 构建后,bundle 将每个组件模板包含两次,使得 bundle 比需要的大得多,因为模板作为字符串包含在内,UglifyJS 无法缩小。 我希望组件模板被排除为
我正在尝试使用 ngc 编译 angular 2.4.4: Error: Error encountered resolving symbol values statically. Expressio
当我这样做时,有什么原因(我可以解决): ngc -p tsconfig.aot.json 作为回应,它要求: 姓名: ngc 似乎忽略了我的 tsconfig.aot.json。 这可能是什么原因?
我正在开发一个 Angular 7 应用程序,除了加载问题外它工作正常,在研究中我发现我应该使用 AOT 构建而不是 JIT 或正常构建,由于应用程序规模巨大,我无法进行 aot 构建,它正在返回堆我
我在 Dynamics AX 2012 中有一个 AOT 查询,它由 HcmWorker 和 HcmEmployment 表(等等)组成。我的问题是,当我创建报告(不是 SSRS)或以其他方式使用此查
有谁知道在使用带有 AOT 编译的 Angular CLI 时如何获得更详细的错误堆栈跟踪?使用 JIT 编译运行时,我的应用程序没有问题,但是当我运行 ng build --aot 时,我得到的只是
我想查询 AOT 以查看是否存在使用 X++ 的表名。谁能指出我正确的方向或提供一些示例代码来做到这一点? 如果表存在并提供名称 (str tableName),则返回 true;否则,返回false
我有一个 Angular 5 应用程序,当我在测试模式下运行时没有问题,也就是说,当我使用 ng serve 命令在本地运行应用程序时。但是,当我在生产模式下部署应用程序时,即通过命令ng build
语境 我正在创建一个 Angular 应用程序的桌面版本,为此我正在使用 Electron 。 打开主窗口非常简单: win = new BrowserWindow({ width: 1280
我有一个看起来像这样的错误处理程序: @Injectable() export class GlobalErrorHandler implements ErrorHandler { construct
当我尝试构建启用了 AOT 选项的 Android 应用程序时,收到以下错误消息。 Invalid command line switch for "aapt.exe". VersionCode is
我在我的 Angular 2 应用程序中使用 Highcharts 和 Kendo Charts,当我尝试运行 AOT 编译时,它会抛出类似的错误 Cannot Import Module 或 Hom
我是一名优秀的程序员,十分优秀!