Angular4 + Cordova なアプリを作る時の注意点
Angular4 + Cordova なアプリを作る時の注意点をいくつか紹介しておく。
だいぶ前に GitHub に Angular4 + Cordova なボイラープレートプロジェクトを上げていて、解説記事を書いた気になっていたのだが、書いていなかったようなので書く。
リポジトリは以下。
ボイラープレートは Angular CLI + Cordova CLI で作る
プロジェクトの雛形は、Angular CLI と Cordova CLI で別々に作り、Angular CLI のフォルダをベースに Cordova CLI で生成されたファイルや index.html
をマージすると良いだろう。
# Angular ボイラープレートはこんな感じ
$ ng new angular-cordova --skip-git --skip-commit --style scss --routing
# Cordova ボイラープレートはこんな風に
$ cordova new angular-cordova-boilerplate com.example.angular.cordova angular-cordova
マージした内容は以下のコミットを参照のこと。
index.html
に meta
要素を追加したり、cordova.js
を読み込む script
要素を書くのを忘れずに。
ビルドの出力先を dist
から www
にしておくと楽
.angular-cli.json
の outDir
を変更して、ビルドしたファイルの出力先を www
ディレクトリにしておくと楽。ただし、ビルドが失敗すると www
ディレクトリが消えたままになり、そのまま cordova
コマンドを叩くと「www
ディレクトリがないから Cordova プロジェクトじゃないよ」と言われてしまう。$ mkdir www
すれば良いが、手作業が入るのでお忘れなきよう。上手いやり方ないもんかな…。
ついでに ./src/tsconfig.json
の types
を消しておくと、型定義ファイルを ./node_modules/
から拾ってくれるようになるのでオススメ。なんでこれがデフォなんだろうなぁ…?
ng build
は --base-href
オプションを指定すること
一番大事なのが、ng build
する際に --base-href
オプションを指定しないと Cordova アプリとして正常に動作しない、ということ。
--base-href
オプション未指定の場合は、index.html
には <base href="/">
とサイトルートパスが指定されるようになっているのだが、これだと cordova.js
などが読み取れなくなる。
正しくするには $ ng build --base-href ./
と指定してビルドし、<base href="./">
と相対パスを指定してやる必要がある。これさえすれば Cordova アプリとして動作する。
Cordova はローカルインストールしても正しく動作しない
Cordova、正しくは cordova-lib
パッケージには、dependencies
に "npm": "^2.10.x"
と記載されている。
Cordova をグローバルインストールした際は、グローバルな位置にいる npm 自身を利用するので、npm の v3 系や v4 系などを利用していても問題ないのだが、Cordova をローカルインストールすると、Cordova 自身が所属する node_modules/
配下に npm パッケージが存在しないので、この dependencies
の記述に従って npm の v2 系を node_modules/
内にダウンロードしてくるのだ。
このせいで、npm run cordova
とローカルインストールした Cordova を使うと、一部のコマンドが正しく動かない。例えば cordova prepare
などが失敗する。
残念ながら、Cordova はグローバルインストールして使う前提になっているようなので、ローカルインストールした Cordova は使わない方針にした方が良い。
環境設定回りでの注意点はこのくらい。
Angular の実装に移ってしまえば、あとは Ionic Native を組み合わせたりして Angular アプリとしてコーディングしていくだけで、大抵のことは Cordova を意識せずに作れる。