angular-cli@8.3.0からdeploy
コマンドが使えるようになったみたいなので早速使ってみたいと思います
ng deploy
angular cliのコマンドserve
やgenerate
などに加えてdeploy
というコマンドが使えるようになりました
プロジェクトにng add
でライブラリを追加することで使えるようになります
deployで追加できるライブラリは公式によると下記があります
- Firebase hosting
- Azure
- Now(Zeit)
- Netlify
- GitHub pages
今回はGitHub pagesへデプロイするようにしてみます
angular-cli-ghpages
すでにangular-cli-ghpages
を使っている場合一度uninstallしてから ng add
で追加します
まだRCが取れていないのでただ追加すると対応されてないバージョンがインストールされてしまうので@next
つけてます(2019-08-24現在)
npm uninstall angular-cli-ghpages npx ng add angular-cli-ghpages@next
- 未対応のバージョンだと追加時に下記メッセージが出力される
The package that you are trying to add does not support schematics. You can try using a different version of the package or contact the package author to add ng-add support.
追加が成功するとangular.json
のprojects.{project-name}.architect.deploy
に設定が追加されます
ng xxx
で使えるコマンドが追加されたということですね
- angular.json
"exclude": [] } + }, + "deploy": { + "builder": "angular-cli-ghpages:deploy", + "options": {} } }
デプロイ
GitHub pagesだとよくあるbase-href
に関しては以前と同様のオプションを追加してあげればOK
gh-pages
ブランチへのpush時にCIのプロセスをトリガーさせたくない場合などはこちらも以前と同様オプションを追加すればOK
$ npx ng deploy --base-href=/ngx-sample/ --message="[skip ci] deploy to GitHub Pages" 📦 Building "ngx-sample". Configuration: "production". Your base-href: "/ngx-sample/" chunk {0} runtime.e4ad693c7aeac9a909d0.js (runtime) 1.45 kB [entry] [rendered] chunk {1} main.a6a735778041614d4db9.js (main) 2.2 MB [initial] [rendered] chunk {2} polyfills.baad0f4292ddf7c90873.js (polyfills) 62.4 kB [initial] [rendered] chunk {3} polyfills-es5.26f53a9590f0c8238c0d.js (polyfills-es5) 135 kB [initial] [rendered] chunk {4} styles.2568d58e57a6400f789b.css (styles) 770 kB [initial] [rendered] chunk {scripts} scripts.d56bc44d788e51855ba7.js (scripts) 209 kB [entry] [rendered] Date: 2019-08-23T20:51:30.435Z - Hash: 1a09b88637d4de69973f - Time: 202054ms 🚀 Successfully published via angular-cli-ghpages! Have a nice day!
デプロイできました
angular.json
のoptions
に記述しても適用されるみたいですね
- angular.json
deploy": { "builder": "angular-cli-ghpages:deploy", "options": { "base-href": "/ngx-sample/", "message": "[skip ci] deploy to GitHub Pages" }
ビルド設定
コマンド実行時にはangular.json
-> deploy.builder
->angular-cli-ghpages:deploy
が呼ばれていますが
中身を追ってみるとビルドとデプロイ両方行っているようでした
- BuilderContext.scheduleTargetでビルドを行っている
- BuilderContextはangular-cliに実装されている
以前はビルドとパブリッシュのコマンドを分けてCircleCIからデプロイするようにしていました
- build
npx ng build --aot --no-progress --base-href '/ngx-sample/'
- publish
ngh -m '[skip ci] deploy to GitHub pages' --dir dist/
今回ng deploy
でサクッとデプロイができるようになりましたがビルド時の設定をカスタマイズしている場合はどこかで読み込ませる必要があります
このあたりはbuilderの実装次第だと思いますがangular-cli-ghpages
の場合はビルド時の設定まではdeploy.options
に書いてもコマンドラインオプション経由でも渡せるようにはなってなさそうです(もしかしたらオプションによるかも)
こちらはangular.json
のarchitect.build.configurations.production
の中の設定を変更することでビルドオプションを変更できます
- angular.json(一部抜粋)
"production": { "optimization": true, "outputHashing": "all", "sourceMap": false, "extractCss": true, "namedChunks": false, "aot": true, "extractLicenses": true, "vendorChunk": false, "progress": false, "buildOptimizer": true, "fileReplacements": [ { "replace": "src/environments/environment.ts", "with": "src/environments/environment.prod.ts" } }
ng build --prod
時の設定をここで行うということですね
おわり
ということでng deploy
よさそうですね
普段コマンドラインオプションばかりでごにょごにょやっていたのでangular.json
の中身を知るいい機会になりました
時間を見てNetlifyやFirebase hostingなども試してみたいと思います