Angular AoT 生成不正确的外部目录引用
Angular AoT Generates Incorrect External Directory References
我一直致力于创建一个包含多个 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
... 它 "works"...
好的,所以在 src/project-ng/aot
生成了 AoT foder。如果我进入 .../aot/app/app.module.ngfactory.ts
,我会在第 10 行看到我的应用程序模块的 import 语句。
import * as i1 from '../../app/app.module';
好的,很酷,它一直正确地跟踪到 ../../app/app.module
并成功解析。
但是,如果我再次进入 AoT 文件夹(我的 lib
文件夹内除外)到 ...aot/lib/modules/test/test.module.ngfactory.ts
,我会在第 10 行看到它,再次尝试 import 我的 TestModule,但是来自 ./test.module
import * as i1 from './test.module';
但是,作为理性的、具有自我意识和计算机意识的人类,它应该更像 ../../../../../lib/modules/test/test.module
。
你
公平地说,我最近才开始 Angular 开发,所以如果其中的某些内容对我来说有些模糊,那可能是因为我很烂。但我希望吸得更少!如果有人愿意帮助我,我将非常感谢你借来的专业知识。
我最终发现并采用的答案是:
Angular Compiler-CLI < 1.5.0-rc.5(我认为它是候选发布版 5,我没有查看更改日志)不支持此行为。在这个项目的最开始,我用了几个月的时间来提前开发代码,我只是在 Angular 5 中开发并获得了我预期的结果。
我一直致力于创建一个包含多个 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
... 它 "works"...
好的,所以在 src/project-ng/aot
生成了 AoT foder。如果我进入 .../aot/app/app.module.ngfactory.ts
,我会在第 10 行看到我的应用程序模块的 import 语句。
import * as i1 from '../../app/app.module';
好的,很酷,它一直正确地跟踪到 ../../app/app.module
并成功解析。
但是,如果我再次进入 AoT 文件夹(我的 lib
文件夹内除外)到 ...aot/lib/modules/test/test.module.ngfactory.ts
,我会在第 10 行看到它,再次尝试 import 我的 TestModule,但是来自 ./test.module
import * as i1 from './test.module';
但是,作为理性的、具有自我意识和计算机意识的人类,它应该更像 ../../../../../lib/modules/test/test.module
。
你
公平地说,我最近才开始 Angular 开发,所以如果其中的某些内容对我来说有些模糊,那可能是因为我很烂。但我希望吸得更少!如果有人愿意帮助我,我将非常感谢你借来的专业知识。
我最终发现并采用的答案是:
Angular Compiler-CLI < 1.5.0-rc.5(我认为它是候选发布版 5,我没有查看更改日志)不支持此行为。在这个项目的最开始,我用了几个月的时间来提前开发代码,我只是在 Angular 5 中开发并获得了我预期的结果。