私の現在の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"
このエラーが発生する理由を誰かが知っていますか?
アプリケーションのこの部分が問題の原因です。
export function windowFactory(): any {
return window;
}
providers: [{
provide: Window,
useFactory: windowFactory
}],
Github:これは、AoTコンパイラーで失敗しますAngular CLI、ウィンドウ(ブラウザーウィンドウ)はインターフェイスであるため
私のAngular 6プロジェクトで同じエラーに直面しました。
"ng build --prod"を実行するときは、警告メッセージをよく読んでください。どのファイルで警告メッセージをスローします(例:dataservice.ts)。
次に、その(dataService.ts)ファイルに移動して、@ Injectableを削除します。
@Injectable({
providedIn: 'root'
})
次に、もう一度ビルドしてみます。わたしにはできる。
完全を期すために、私は別のコンテキストで同じエラーに出くわしました。 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'] }
]
})
デフォルトのエクスポートを削除すると問題が解決しました。
インジェクショントークンの代わりにインジェクションの日付を提供しようとしたときに同じエラーが発生しました。
だから私はしました:
providers: [
{ provide: Date, useValue: new Date() }
]
そしてそれを
providers: [
{ provide: NOW, useValue: new Date() },
],
NOW
は、このように依存するサービスで定義されます
export const NOW = new InjectionToken<Date>('now');
すべて Angular site に記載されています。
私は、HttpClientを使用するサービスの基本クラスを作成しました。
基本クラスとサブクラスはInjectable
としてマークされました。
基本クラスからInjectable
を削除し、問題を解決しました。
これは、BaseClassとDriveClassの両方に@Injectable
デコレータがあったClass Inheritanceが原因で発生しました。
@Injectable({
providedIn: 'root'
})
export class BaseService {
...
}
@Injectable({
providedIn: 'root'
})
export class DriveService extends BaseService {
...
}
BaseServiceから@Injectable
を削除すると、問題が解決しました。
Im4everの答えを拡張すると、私はこれと同じ問題に遭遇しました。これは、_ng serve
_または_ng build
_ではなく、構成を設定するときにビルドを実行したときにのみ表示され、AOTの問題であると思いました。
LocalStorageを挿入できるようにするために行っていたファクトリメソッドを使用してサービスを登録するとき、モジュールを次のようにセットアップしました(簡潔にするために短縮しました)。
_providers: [
{provide: StateService, useFactory: provideStateService}
],
_
この問題を修正するために行ったのは、StateService
クラス定義でalsoにあった@Injectable({})
デコレータを削除することでした。それを削除すると、エラーはすべてなくなりました。
テンプレートを確認してくださいコンポーネントで定義されていないテンプレートの変数を使用した可能性があります
Ng build --prod for Angular 7.1.4の実行中にこの問題が発生したため、Angularマテリアルツールチップの位置を使用するために作成したTooltipServiceに対してKarthi Coimbatoreが推奨した@Injectableを削除しました。