Angular AOT编译器生成错误的导入
我有一个多应用angular cli项目,其中包含一些代码库共享 基本上,结构如下所示:Angular AOT编译器生成错误的导入,angular,angular-cli,angular2-aot,Angular,Angular Cli,Angular2 Aot,我有一个多应用angular cli项目,其中包含一些代码库共享 基本上,结构如下所示: import * as i0 from './demo.component.css.shim.ngstyle'; import * as i1 from '@angular/core'; import * as i2 from './demo.component'; src-主要应用 应用程序组件-引导组件 应用程序模块 共享-共享应用程序部件 演示组件 共享。模块 扩展-第二个应用程序应该扩展
import * as i0 from './demo.component.css.shim.ngstyle';
import * as i1 from '@angular/core';
import * as i2 from './demo.component';
- src-主要应用
- 应用程序组件-引导组件
- 应用程序模块
- 共享-共享应用程序部件
- 演示组件
- 共享。模块
- 扩展-第二个应用程序应该扩展主应用程序
- 扩展应用程序组件-引导组件
- 扩展模块
SharedModule
(声明并导出DemoComponent
)由AppModule
和ExtensionModule
导入DemoComponent
然后添加到AppComponent
和ExtensionAppComponent
的模板中
使用JIT编译器时,一切正常(ng-serve
,ng-serve--app-extension
),但AOT编译器没有说:
无法解析“../../src/app/demo/demo.component.ngfactory”
查看GENDIR/app/demo/demo.component.ngfactory中生成的文件,我们得到以下信息:
import * as i0 from './demo.component.css.shim.ngstyle';
import * as i1 from '@angular/core';
import * as i2 from './demo.component';
最后一次导入失败,因为GENDIR/app/demo
文件夹中没有“demo.component”。令人惊讶的是,作为i0
导入的文件确实存在,并且包含适当的样式
更新:问题似乎出在ngc
中。即使在tsconfig.json
中添加一个path
别名,它也不起作用。在github()上有几个关于它的问题。我今天遇到了一个类似的问题,我可以通过将我的tsconfig.app.json
文件移动到我想要使用的所有代码的祖先目录中来解决它。然后,我修改了我的tsconfig.app.json
中的include
数组,使其仅包含辅助应用程序
注意:我使用一个.angular cli.json
配置来构建多个应用程序。如果您有多种配置,您的里程可能会有所不同
对于您的示例,您可以尝试以下结构:
-
- src(主要应用)
- 应用程序组件-引导组件
- 应用程序模块
- 共享-共享应用程序部件
- 演示组件
- 共享。模块
- 扩展-第二个应用程序应该扩展主应用程序
- 扩展应用程序组件-引导组件
- 扩展模块
- tsconfig.extension.json-扩展应用程序的特定于应用程序的tsconfig文件
在tsconfig.extension.json文件中,添加一个include部分:
...
"include": [
"./extension/**/*"
]
...
假设您在.angular cli.json
文件中声明了每个应用程序,您还需要更新扩展应用程序的“tsconfig”
属性:
"name": "extension",
// Other configuration...
"tsconfig": <insert path to tsconfig based on "root" here>
“名称”:“扩展名”,
//其他配置。。。
“tsconfig”:
读者当心
这种结构是一种黑客行为,没有官方支持。如果将来的更新会导致它自身崩溃,请不要感到惊讶
致力于:
- 节点:v8.4.0
- 净现值:5.4.2
- @角度/cli:1.4.2