Angular アプリケーションの URL を理解しよう! --base-href と --deploy-url の役割とは?

2024-04-10

Angular CLI ツールの --base-href と --deploy-url パラメータの違い

--base-href

役割: アプリケーションのルート URL を指定します。

影響:

  • ルーティング: アプリケーション内のリンクは、--base-href で指定された URL を基に生成されます。
  • HTML ファイル: 生成された HTML ファイルには、base href 属性が --base-href で指定された値に設定されます。

例:

ng build --base-href /my-app

この場合、アプリケーションは https://example.com/my-app でホストされていると想定されます。

--deploy-url

役割: アプリケーションの静的アセット (画像、CSS、JavaScript など) の URL を指定します。

  • 静的アセット: 生成された静的アセットのパスには、--deploy-url で指定された URL プレフィックスが付加されます。
ng build --deploy-url https://cdn.example.com/

この場合、アプリケーションの静的アセットは https://cdn.example.com/ から配信されます。

2 つのパラメータの主な違い

項目--base-href--deploy-url
役割アプリケーションのルート URL を指定静的アセットの URL を指定
影響ルーティング、HTML ファイル静的アセット、HTML ファイル
備考Angular v13 で非推奨ビルド速度を遅らせる可能性
  • --base-href はルーティングと HTML ファイルに影響を与え、--deploy-url は静的アセットに影響を与えます。
  • 2 つのパラメータは似ていますが、異なる役割を果たします。
  • Angular v13 では --deploy-url は非推奨となっているため、代わりに --base-href を使用する方が好ましいです。



<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>My Angular App</title>
  <base href="/">
</head>
<body>
  <app-root></app-root>
</body>
</html>
// app.component.ts
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'My Angular App';
}

--base-href の使用例

ng build --base-href /my-app
  • 生成された HTML ファイルには、base href 属性が /my-app に設定されます。
  • アプリケーション内のリンクは /my-app を基に生成されます。
  • app.component.html 内の href="/home"/my-app/home になります。
  • app.component.css 内の url(./image.png)/my-app/image.png になります。

--deploy-url の使用例

ng build --deploy-url https://cdn.example.com/
  • 生成された HTML ファイル内の静的アセットへの参照は、https://cdn.example.com/ プレフィックスを含みます。
  • index.html 内の <link href="styles.css"><link href="https://cdn.example.com/styles.css"> になります。
  • app.component.html 内の <img src="image.png"><img src="https://cdn.example.com/image.png"> になります。

注意事項

  • --base-href--deploy-url は同時に使用できます。
  • --deploy-url は Angular v13 で非推奨となっています。
  • --base-href を使用すると、CSS の background-image などのパスが自動的に書き換えられない場合があります。

--base-href--deploy-url パラメータは、アプリケーションの URL 構造を制御するために使用できます。それぞれの役割を理解して、適切に使用することが重要です。




Angular アプリケーションの URL 構造を制御する他の方法

HTML ファイルの <head> セクションに <base> タグを追加することで、アプリケーションのルート URL を指定できます。

<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>My Angular App</title>
  <base href="/my-app">
</head>
<body>
  <app-root></app-root>
</body>
</html>

この方法を使用すると、--base-href パラメータを指定する必要はありません。

@angular/platform-browser モジュールの APP_BASE_HREF トークンを使用することで、アプリケーションのルート URL をプログラムで設定できます。

import { APP_BASE_HREF, NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

@NgModule({
  imports: [
    BrowserModule
  ],
  providers: [
    { provide: APP_BASE_HREF, useValue: '/my-app' }
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

この方法を使用すると、環境によって異なる URL を設定することができます。

ルーター設定

Angular のルーター設定を使用して、個々のルートの URL をカスタマイズできます。

import { RouterModule, Routes } from '@angular/router';

const routes: Routes = [
  { path: '', component: HomeComponent },
  { path: 'about', component: AboutComponent }
];

@NgModule({
  imports: [
    RouterModule.forRoot(routes)
  ],
  exports: [RouterModule]
})
export class AppRoutingModule { }

この方法を使用すると、アプリケーション内の特定のページの URL を制御することができます。


angular angular-cli


Angular で ngAfterViewInit ライフサイクルフックを活用する

ngAfterViewInit ライフサイクルフックは、コンポーネントのテンプレートとビューが完全に初期化され、レンダリングが完了した後に呼び出されます。このフックを使用して、DOM 操作やデータバインドなど、レンダリングに依存する処理を実行できます。...


Angular アプリ開発で遭遇するエラー「There is no directive with exportAs set to ngForm」の解決策

このエラーが発生する主な原因は以下の3つです。FormsModule モジュールのインポート漏れ:テンプレート内で ngForm ディレクティブを使用するには、まず FormsModule モジュールをコンポーネントのモジュールファイルにインポートする必要があります。...


Angular: <div> 要素の (click) イベントが機能しないときのトラブルシューティング

CSS の影響最も一般的な原因は、CSS スタイルによって <div> 要素がクリックできない状態になっていることです。考えられる問題は以下の通りです。position プロパティ: <div> 要素に position: absolute または position: fixed が設定されている場合、他の要素の上に重なって表示される可能性があり、クリックイベントが伝達されないことがあります。この場合は、position: relative を設定することで解決できます。...


Angular 5 & MaterialでSnackBarの背景色を自由自在に変更! 2つの基本と応用4つの方法を徹底解説

方法1:CSSを使用するSnackBarコンポーネントにカスタムCSSクラスを適用します。適用したCSSクラスで、background-colorプロパティを使用して背景色を設定します。例:方法2:MatSnackBarConfigを使用する...


AngularとFirebaseでシングルページアプリケーションを開発しよう!

Angularのルーティングは、主に以下の要素で構成されています。Router: ルーティングを管理するクラスです。URLの変化を監視し、対応するコンポーネントを表示します。Route: どのURLがどのコンポーネントに対応するかを定義する情報です。パス、コンポーネントクラス、データなどを含みます。...


SQL SQL SQL SQL Amazon で見る



JavaScriptで賢く解決!``タグを使わない相対URLの解決方法

HTMLの<base>タグは、ページ内の全ての相対URLを解決するための基点となるURLを指定するものです。このタグを使うことで、コードを簡潔に保ち、URL管理を効率化できます。利点コードの簡潔化: <base>タグを使えば、全てのリンクに絶対URLを記述する必要がなくなり、コードがスッキリします。