0

我一直致力于创建一个包含多个 Angular 和 NodeJS 项目的项目(所有 Typescript)。那部分进展顺利,但我认为如果我的源文件夹下有一个库文件夹,我的所有 Typescript 项目都可以共享项目模块,Typescript 接口,NgModules 等,那就太好了。但是,当我编译作为生产源,ModuleFactory 对实际模型的引用无法正确转换为我的“lib”NgModules。

我创建了一个演示并将其上传到我的 GitHub 作为示例: https ://github.com/ItsBaneDude/broken-external-links

我已将编译脚本作为 npm 脚本包含在

npm run build-aot  // Builds and fails for production
npm run build-jit  // Builds and runs for dev i.e. "ng serve --dev"
npm run compile-aot // To compile and keep AoT folder in src, just ngc

我忘了放 JiT 服务脚本,这样你就可以自动看到它在浏览器中运行,但我的意思是你可以ng serve --dev做到这一点。

那么,会发生什么:你尝试为生产而构建npm run build-aot,它说

ERROR in C:/Users/Bane/Documents/node_projects/broken-external-libs/src/project-ng/aot/lib/modules/test/test.module.ngfactory.ts (10,21): Cannot find module './test.module'.

真可惜。我想知道为什么。

运行 AoT 编译 npm run compile-aot...它“工作”...

好的,所以 AoT 素材在src/project-ng/aot. 如果我进入.../aot/app/app.module.ngfactory.ts,我会在第 10 行看到我的应用程序模块的导入语句。

import * as i1 from '../../app/app.module';

好的,很酷,它一直正确地返回../../app/app.module并成功解决。

但是,如果我再次进入 AoT 文件夹,除了在我的lib文件夹中,to ...aot/lib/modules/test/test.module.ngfactory.ts,我在第 10 行再次看到它,尝试导入我的 TestModule,但从./test.module

import * as i1 from './test.module';

但是,正如我们所知的理性的、具有自我意识和计算机意识的人类,它应该更像../../../../../lib/modules/test/test.module.

是的

公平地说,我最近才开始 Angular 开发,所以如果其中一些对我来说似乎很模糊,那可能是因为我很烂。但我希望吸得更少!如果有人愿意帮助我,我将非常感谢您借用的专业知识。

4

1 回答 1

0

我最终发现并采用的答案是:

Angular Compiler-CLI < 1.5.0-rc.5(我认为它是候选版本 5,我没有查看更改日志)不支持这种行为。在这个项目一开始还有几个月的时间来开发代码时,我只是在 Angular 5 中进行开发并获得了我预期的结果。

于 2017-10-29T02:49:57.483 回答