Angular 4.を使用してwebappを構築しています。トップレベルのルーティングモジュールと、サブモジュールごとに個別のルーティングモジュール(HomeModuleなど)があります。
これは私のトップレベルのルーティング構成です:
export const ROUTES: Routes = [
{path: '', loadChildren: './home#HomeModule'},
{path: '**', component: NotFoundComponent},
];
ng server
を実行すると、そのモジュールhome
が見つかりませんという奇妙なエラーが表示されます。アプリはブラウザで動作しません。
奇妙な部分は次のとおりです。ファイルが変更され、webpackがプロジェクトを再コンパイルすると、すべてが正常に機能し、ルーティングが機能します。
エラーは、ng serve
を実行しているときにのみ表示されます。
これは、ファイルの変更によりプロジェクトが再コンパイルされたときではなく、ng serve
を実行しているときに表示されるエラーです。
ERROR in Error: Could not resolve module ./home relative to /path/to/my/project/src/app/app.module.ts
at StaticSymbolResolver.getSymbolByModule (/path/to/my/project/node_modules/@angular/compiler/bundles/compiler.umd.js:31884:30)
at StaticReflector.resolveExternalReference (/path/to/my/project/node_modules/@angular/compiler/bundles/compiler.umd.js:30350:62)
at parseLazyRoute (/path/to/my/project/node_modules/@angular/compiler/bundles/compiler.umd.js:28616:55)
at listLazyRoutes (/path/to/my/project/node_modules/@angular/compiler/bundles/compiler.umd.js:28578:36)
at visitLazyRoute (/path/to/my/project/node_modules/@angular/compiler/bundles/compiler.umd.js:29995:47)
at AotCompiler.listLazyRoutes (/path/to/my/project/node_modules/@angular/compiler/bundles/compiler.umd.js:29963:20)
at AngularCompilerProgram.listLazyRoutes (/path/to/my/project/node_modules/@angular/compiler-cli/src/transformers/program.js:157:30)
at Function.NgTools_InternalApi_NG_2.listLazyRoutes (/path/to/my/project/node_modules/@angular/compiler-cli/src/ngtools_api.js:44:36)
at AngularCompilerPlugin._getLazyRoutesFromNgtools (/path/to/my/project/node_modules/@ngtools/webpack/src/angular_compiler_plugin.js:247:66)
at Promise.resolve.then.then (/path/to/my/project/node_modules/@ngtools/webpack/src/angular_compiler_plugin.js:538:50)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
前もって感謝します。
私は絶対パス規則を使用していました:app/home#HomeModule
およびそれは機能しませんでした。
次に、relativeパス規則を試してみました:./home#HomeModule
そして、それは機能しました。
... CLIでは、遅延ルートへのパスは、現在のファイルからの相対パスである必要があります
私はこれに従いました Tutorial そして、それは絶対パス規則を使用して、それは働きました。
なぜ矛盾があるのか知りたいです...
UPDATE:
Friedrich前述 のように、絶対パスを使用して動作させるには、src/tsconfig.app.json
を次のように更新します。
{
...,
"compilerOptions": {
...,
baseUrl: "./"
}
}
私は同じ問題を抱えていましたが、上記の答えはどれもうまくいきませんでした、私が見つけた最終的な解決策は、モジュールの絶対パスと「#」の後のモジュールクラス名を使用することでした.
export const ROUTES: Routes = [
{path: '', loadChildren: 'src/app/pathToYourModule/home.module#HomeModule'},
{path: '**', component: NotFoundComponent}
];
「src」からパスを開始しましたが、モジュールパスから「.ts」を削除することを忘れないでください。
モジュールファイルへの参照から.tsサフィックスを削除する必要があります:{path: ''、loadChildren: 'app/pathToYourModule/home.module#HomeModule'}、
同様の問題に直面し、モジュール名から拡張子の削除を追加し、相対パスを追加することで解決しました。
エラーを投げていたコード:
const routes: Routes = [
{
path: 'settings',
loadChildren: 'app/setting/setting.module.ts#SettingsModule'
}
];
作業コード:
const routes: Routes = [
{
path: 'settings',
loadChildren: './setting/setting.module#SettingsModule'
}
];
それが役に立てば幸い!
注: On Angular version-7.0.0
次のように、モジュールの絶対パスとモジュールファイル名を使用してみてください。
export const ROUTES: Routes = [
{path: '', loadChildren: 'app/pathToYourModule/home.module.ts#HomeModule'},
{path: '**', component: NotFoundComponent},
];
ソリューションが見つからない場合は、loadChildren行から「.ts」拡張子を削除するだけです。
{path: '', loadChildren: './home.ts#HomeModule'},
に
{path: '', loadChildren: './home#HomeModule'},
この問題に出くわしました。私にとっては、ファイル名に.module
を追加するのを忘れていました。
私はこれを持っていました:
const routes: Routes = [
/* ... */
{
path: 'page-not-found',
loadChildren: './modules/page-not-found/page-not-found#PageNotFoundModule' // <- page-not-found missing .module
},
{
path: '',
redirectTo: 'home',
pathMatch: 'full'
},
{
path: '**',
redirectTo: 'page-not-found'
}
];
する必要があります:
const routes: Routes = [
/* ... */
{
path: 'page-not-found',
loadChildren: './modules/page-not-found/page-not-found.module#PageNotFoundModule'
},
{
path: '',
redirectTo: 'home',
pathMatch: 'full'
},
{
path: '**',
redirectTo: 'page-not-found'
}
];