l08084のブログ

技術記事の執筆は、祈りに近い

GitHub Pages にAngularアプリをデプロイした時、画像へのアクセスができない

という問題が起きました。

バージョン情報

  • Angular: 5.2.3

  • angular-cli-ghpages: 0.5.2

  • angular/cli: 1.6.5

  • Node: 8.1.4

発生した問題について

angular-cli-ghpagesを使ってGitHub Pagesにデプロイした際に、CSSからの画像ファイル参照はうまくいくが、HTMLからの画像ファイル参照は失敗するという事象が発生した。

なお、ローカルで実行したときにはHTML、CSS、ともに画像ファイルへのアクセスはできていた。

src/app/app.component.html:

<img #bird [ngStyle]="birdPosition$ | async"
 class="bird" src="/assets/images/bird.jpg">

src/app/app.component.scss:

.wall {
    background-image: url(/assets/images/white-wood.jpg);
    width: 10%;
    height: 100%;
    position: absolute;
    user-select: none;
}

angular-cli.json:

{
  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
  "project": {
    "name": "angular-redux-flappy-bird"
  },
  "apps": [
    {
      "root": "src",
      "outDir": "dist",
      "assets": [
        "assets",
        "favicon.ico",
        "bird.jpg"
      ],
      "index": "index.html",
      "main": "main.ts",
      "polyfills": "polyfills.ts",
      "test": "test.ts",
      "tsconfig": "tsconfig.app.json",
      "testTsconfig": "tsconfig.spec.json",
      "prefix": "app",
      "styles": [
        "styles.scss"
      ],
      "scripts": [],
      "environmentSource": "environments/environment.ts",
      "environments": {
        "dev": "environments/environment.ts",
        "prod": "environments/environment.prod.ts"
      }
    }
  ],
  "e2e": {
    "protractor": {
      "config": "./protractor.conf.js"
    }
  },
  "lint": [
    {
      "project": "src/tsconfig.app.json",
      "exclude": "**/node_modules/**"
    },
    {
      "project": "src/tsconfig.spec.json",
      "exclude": "**/node_modules/**"
    },
    {
      "project": "e2e/tsconfig.e2e.json",
      "exclude": "**/node_modules/**"
    }
  ],
  "test": {
    "karma": {
      "config": "./karma.conf.js"
    }
  },
  "defaults": {
    "styleExt": "scss",
    "component": {}
  }
}

デプロイ手順

GitHub Pagesにデプロイしたときの手順

# インストールしていなければ
$ npm i -g angular-cli-ghpages


$ ng build --prod --base-href "https://[GitHubユーザー名].github.io/[リポジトリ名]/"
$ angular-cli-ghpages

解決方法

HTMLの画像ファイルのパスを変更したところ、画像へのアクセスが成功するようになった。

<img #bird [ngStyle]="birdPosition$ | async"
 class="bird" src="assets/images/bird.jpg">

src="/assets/images/bird.jpg"からsrc="assets/images/bird.jpg"に変更している。

参考サイト

angularjs - github pages images not showing - Stack Overflow

linking an image from template html requires path from app root · Issue #3292 · angular/angular-cli · GitHub

Angular2, Angular-cli, Webpack - image assets not loading on github:pages after prod deploy - Stack Overflow