【问题标题】:Angular 2 Ahead-of-Time Compiler Not Finding ngfactory?Angular 2 Ahead-of-Time 编译器找不到 ngfactory?
【发布时间】:2017-05-03 23:30:12
【问题描述】:

更新

我仍在为此工作,但现在 ngc cli 没有给我任何错误。但是它仍然不能生成我的 NGFactory 文件。我已将所有内容更新到最新版本。

tsconfig.js

{
 "compilerOptions": {
   "target": "es5",
   "module": "es2015",
   "moduleResolution": "node",
   "sourceMap": false,
   "emitDecoratorMetadata": true,
   "experimentalDecorators": true,
   "lib": ["es2015", "dom"],
   "noImplicitAny": true,
   "suppressImplicitAnyIndexErrors": true
 },

 "files": [
   "./typescript/modules/app.module.ts"
   // "./typescript/main.ts" <- see (1)
 ],

 "angularCompilerOptions": {
    "genDir": "aot",
    "skipMetadataEmit" : true
 }
}

(1) - 撤销这个文件,它引导我的 A2 应用程序,因此指向我的 NgFactory 文件,这意味着 ngc 现在运行没有任何错误。

但它似乎读取了我的 app.module 文件,并制作了一个 node_modules 文件并为 A2 本身制作了许多工厂文件。但是我的代码,我的 app.module.ngfactory 不在我的 tsconfig 指向的“aot”文件夹中!

请帮忙!

我对 Angular 2 非常陌生,并且一直在尝试使用 webpack 为我构建一个捆绑文件。但是,此文件超过 3mb。所以我想我会考虑使用 System JS(我问了一个问题)。

但在查看时,我发现为什么我的捆绑文件如此之大,因为我使用 JIT 编译器方法来构建代码。因此,我一直在尝试让我的简单小应用程序(来自 Anagular 站点的入门应用程序)使用 AOH 编译器进行构建。但我无法让它工作。

这是我的 ts 配置代码:

tsconfig.json
{
  "compilerOptions": {
    "target": "es5",
    "module": "es2015",
    "moduleResolution": "node",
    "sourceMap": false,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "lib": ["es2015", "dom"],
    "noImplicitAny": true,
    "suppressImplicitAnyIndexErrors": true
  },

  "files": [
    "./typescript/modules/app.module.ts",
    "./typescript/main.ts"
  ],

  "angularCompilerOptions": {
   "genDir": "aot",
   "skipMetadataEmit" : true
  }
}

我的组件代码我将moduleId 添加到@Component 中,并将window.module = 'aot'; 设置添加到加载应用程序的html 文件中。我的组件代码:

app.components.ts

 import { Component } from '@angular/core';

 @Component({
   moduleId: module.id,
   selector: 'my-app',
   template: `<h1>Hello {{name}}</h1>`
 })

 export class AppComponent { name = 'Angular'; } 

这是我当前的应用模块代码,与我使用的示例相同。

app.module.ts

 import { NgModule }      from '@angular/core';
 import { BrowserModule } from '@angular/platform-browser';
 import { AppComponent }  from '../components/app.component';

 @NgModule({
   imports:      [ BrowserModule ],
   declarations: [ AppComponent ],
   bootstrap:    [ AppComponent ]
 })

 export class AppModule { }

现在是我的 main.ts 文件,这似乎给我带来了问题。我已将导入语句更改为使用NgFactory,但这根本不起作用!

Main.ts

 import { platformBrowser }    from '@angular/platform-browser';
 import { AppModuleNgFactory } from '../aot/app/app.module.ngfactory'; (1)

 platformBrowser().bootstrapModuleFactory(AppModuleNgFactory);

 (1) - this file is not generted at all!

所以当我运行node_modules/.bin/ngc(在 Ubuntu 16.04 VM 中运行)时,我收到以下错误:

 Error at /var/www/typescript/main.ts:10:36: 
 Cannot find module './modules/app.ngfactory'. <-- ????????

是的,我已经安装了@angular/compiler-cli &amp; @angular/platform-server

是的,我确实发现了这个问题,Angular 2 - Ahead-of-time compilation how to - 但是当我将 main.ts 文件更改为指向另一个文件夹时,我得到了同样的错误....

那我做错了什么?

我也不确定这如何影响使用 webpack let 构建捆绑文件,我是否无法让它工作,我还没有走到那一步,但欢迎任何帮助。

谢谢。

【问题讨论】:

    标签: angular typescript


    【解决方案1】:

    您确定那是 app.module.ngfactory 的正确文件路径吗?我必须从 app.module.ngfactory 复制路径才能让我的 main.ts 工作,结果如下:

    import { AppModuleNgFactory } from './app.module.ngfactory';
    

    我刚刚从您的帖子中看到了这一点:

    (1) - 这个文件根本没有生成!

    我的 app.module.ngfactory 没有生成,因为我没有正确版本的打字稿。我在 package.json 文件中更改为以下内容并生成它:

    "awesome-typescript-loader": "3.0.0-beta.17",
    "typescript": "2.0.3"
    

    【讨论】:

    • 我的文件指向正确的位置,并且 typescript 的版本比你的 @ 2.1.4 新,我使用的是相同版本的 awesome-typescript-loader。我现在已经回到使用 JIT,以便我可以学习 A2。我确定它不是 A2,而是我的 webpack 或一般配置有问题
    • 我尝试了很多不同的方法,但我的 ngfactory 文件丢失了!而 webpack 只是构建文件,因为它丢失了 - 我做错了什么,但我看不出它是什么!
    • 这可能没有帮助,但我不确定 2.1.4 是否稳定,这就是我坚持使用 2.0.3 的原因,它一直在为我构建 ngfactory 文件。
    【解决方案2】:

    这可能不是一个完整的答案,但从我所做的有限测试来看,它确实有效。

    我可以通过这个 git hub A2 入门项目,https://github.com/jbalbes/angular2-aot-webpack。我将它拉到一个工作测试文件夹中并且它工作,ngc 命令创建了项目.ngfactory 文件。

    但是,此项目使用的是旧版本的 A2。所以我做了一些测试,我已经将package.json中的A2依赖更新为2.4.1。之后它仍在工作。所以我添加了我所有的包,认为其中一个或多个与ngc 编译器有某种问题。

    但是,在我将打字稿添加到 2.1.4 之前,似乎没有什么可以解决它 - 然后它没有生成任何 ngfactory 文件。

    如果其他人对 AOT 和 typescript 2.1.4 有问题,请告诉我(我也尝试过 2.1.1,但出现了很多错误)

    【讨论】:

      猜你喜欢
      • 2017-01-13
      • 2017-01-13
      • 1970-01-01
      • 1970-01-01
      • 2017-01-15
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多