web-dev-qa-db-ja.com

Angular AOTビルド:内部エラー:不明な識別子が未定義です

私の現在のAngular 2プロジェクトが開始する前にAngularはAOT機能をサポートしていました。今、それを機能させようとしています。次のエラーが発生します。そして、これが何を意味するのか、そして問題のデバッグをどこから始めるのかわかりません:

ERROR in Error: Internal error: unknown identifier undefined
at Object.importExpr$$1 [as importExpr] (...\node_modules\@angular\compiler\bundles\compiler.umd.js:24211:23)
at tokenExpr (...\node_modules\@angular\compiler\bundles\compiler.umd.js:18577:39)
at providerDef (...\node_modules\@angular\compiler\bundles\compiler.umd.js:18480:20)
at ...\node_modules\@angular\compiler\bundles\compiler.umd.js:18697:77
at Array.map (<anonymous>)
at NgModuleCompiler.compile (...\node_modules\@angular\compiler\bundles\compiler.umd.js:18697:44)
at AotCompiler._compileModule (...\node_modules\@angular\compiler\bundles\compiler.umd.js:24144:32)
at ...\node_modules\@angular\compiler\bundles\compiler.umd.js:24056:66
at Array.forEach (<anonymous>)
at AotCompiler._compileImplFile (...\node_modules\@angular\compiler\bundles\compiler.umd.js:24056:19)
at ...\node_modules\@angular\compiler\bundles\compiler.umd.js:23969:87
at Array.map (<anonymous>)
at AotCompiler.emitAllImpls (...\node_modules\@angular\compiler\bundles\compiler.umd.js:23969:52)
at CodeGenerator.emit (...\node_modules\@angular\compiler-cli\src\codegen.js:42:46)
at ...\node_modules\@angular\compiler-cli\src\codegen.js:33:61
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)

依存関係

"@angular/animations": "^4.4.4",
"@angular/common": "^4.4.4",
"@angular/compiler": "^4.4.4",
"@angular/core": "^4.4.4",
"@angular/forms": "^4.4.4",
"@angular/platform-browser": "^4.4.4",
"@angular/platform-browser-dynamic": "^4.4.4",
"@angular/router": "^4.4.4",
"@ngx-translate/core": "^8.0.0",
"@ngx-translate/http-loader": "^2.0.0",
"core-js": "^2.5.1",
"font-awesome": "^4.7.0",
"primeng": "^4.2.1",
"quill": "^1.3.2",
"rxjs": "^5.4.3",
"zone.js": "^0.8.18"

このエラーが発生する理由を誰かが知っていますか?

9
im4ever

アプリケーションのこの部分が問題の原因です。

export function windowFactory(): any {
    return window;
}

providers: [{
    provide: Window,
    useFactory: windowFactory
}],

Github:これは、AoTコンパイラーで失敗しますAngular CLI、ウィンドウ(ブラウザーウィンドウ)はインターフェイスであるため

10
im4ever

私のAngular 6プロジェクトで同じエラーに直面しました。

"ng build --prod"を実行するときは、警告メッセージをよく読んでください。どのファイルで警告メッセージをスローします(例:dataservice.ts)。

次に、その(dataService.ts)ファイルに移動して、@ Injectableを削除します。

@Injectable({
providedIn: 'root'
})

次に、もう一度ビルドしてみます。わたしにはできる。

7

完全を期すために、私は別のコンテキストで同じエラーに出くわしました。 defaultとしてエクスポートされたアップグレード済みangularjsサービスクラスを使用すると、ビルドでエラーが発生しました

// Service definition
export default class MyService { /* Registered AngularJS service here */ }

// Module
import MyService from './my-service'

// Upgrade 
export function myServiceFactory(i:any) {
  return i.get('myService');
}

// ngUpgraded Angular main module 
@NgModule({
  providers: [
    { provide: MyService, useFactory: myServiceFactory, deps: ['$injector'] }
  ]
})

デフォルトのエクスポートを削除すると問題が解決しました。

2
oliverguenther

インジェクショントークンの代わりにインジェクションの日付を提供しようとしたときに同じエラーが発生しました。

だから私はしました:

providers: [
    { provide: Date, useValue: new Date() }
  ]

そしてそれを

providers: [
    { provide: NOW, useValue: new Date() },
  ],

NOWは、このように依存するサービスで定義されます

export const NOW = new InjectionToken<Date>('now');

すべて Angular site に記載されています。

2
Sylvain Girard

私は、HttpClientを使用するサービスの基本クラスを作成しました。

基本クラスとサブクラスはInjectableとしてマークされました。

基本クラスからInjectableを削除し、問題を解決しました。

1
Jess

これは、BaseClassとDriveClassの両方に@InjectableデコレータがあったClass Inheritanceが原因で発生しました。

@Injectable({
  providedIn: 'root'
})
export class BaseService { 
  ... 
}

@Injectable({
  providedIn: 'root'
})
export class DriveService extends BaseService {
 ... 
}

BaseServiceから@Injectableを削除すると、問題が解決しました。

0
Gil Epshtain

Im4everの答えを拡張すると、私はこれと同じ問題に遭遇しました。これは、_ng serve_または_ng build_ではなく、構成を設定するときにビルドを実行したときにのみ表示され、AOTの問題であると思いました。

LocalStorageを挿入できるようにするために行っていたファクトリメソッドを使用してサービスを登録するとき、モジュールを次のようにセットアップしました(簡潔にするために短縮しました)。

_providers: [
    {provide: StateService, useFactory: provideStateService}
  ],
_

この問題を修正するために行ったのは、StateServiceクラス定義でalsoにあった@Injectable({})デコレータを削除することでした。それを削除すると、エラーはすべてなくなりました。

0
dwbartz

テンプレートを確認してくださいコンポーネントで定義されていないテンプレートの変数を使用した可能性があります

0
Piyush Patel

Ng build --prod for Angular 7.1.4の実行中にこの問題が発生したため、Angularマテリアルツールチップの位置を使用するために作成したTooltipServiceに対してKarthi Coimbatoreが推奨した@Injectableを削除しました。

0
Marvin Dawson