プロダクション段階に入ったら、どのようにAngularアプリケーションをデプロイするのですか?
私がこれまで見てきたすべてのガイド( angular.io でも)は変更を反映するためにサービスを提供するためのlite-serverとbrowserSyncを頼りにしています。
コンパイル済みのすべての.js
ファイルをindex.html
ページにインポートするのですか、それともgulpを使用して縮小するのですか?彼らは機能しますか?製品版ではSystemJSはまったく必要ですか?
あなたは実際にここに一つに二つの質問に触れています。 1つ目は、アプリケーションをホストする方法です。そして@toskvが答えるには本当に広すぎる質問を述べたように、そして多くの異なった事に依存しています。 2つ目はより具体的です - アプリケーションのデプロイメントバージョンをどのように準備しますか。ここにいくつかの選択肢があります。
はい、あなたはおそらくあなたのパッケージの一部としてsystemjsと他のたくさんの外部ライブラリをデプロイする必要があるでしょう。そしてはい、あなたはあなたがあなたのhtmlページから参照するちょうど2、3のjsファイルにそれらをバンドルすることができるでしょう。ただし、ページからコンパイル済みのすべてのjsファイルを参照する必要はありません。モジュールローダとしてのsystemjsがそれを処理します。
私はそれが濁っているのを知っています - あなたが#2から始めるのを手助けするためにここに2つの本当に良いサンプルアプリケーションがあります:
SystemJSビルダー: angular2 seed
WebPack: Angular 2 WebPackスターター
彼らがどのようにそれをするか見てください - そしてうまくいけばこれはあなたが作るアプリをバンドルするあなたの方法を見つけるのを助けるでしょう。
簡単な答えです。 Angular CLIを使用して、
ng build
プロジェクトのルートディレクトリにコマンドを入力します。サイトはdistディレクトリに作成され、それを任意のWebサーバにデプロイできます。
アプリにプロダクション設定がある場合はテスト用にビルドされます。
ng build --prod
これでdist
ディレクトリにプロジェクトが構築され、これをサーバーにプッシュできます。
私が最初にこの答えを投稿してから多くのことが起こりました。 CLIはついに1.0.0になったので、このガイドに従うと、アップグレードしようとする前にプロジェクトがアップグレードされるはずです。 https://github.com/angular/angular-cli/wiki/stories-rc-update
Angular CLIを使うと簡単です。 Herokuの例:
Herokuアカウントを作成してCLIをインストールする
angular-cli
をpackage.json
内のdependencies
に移動します(したがって、Herokuにプッシュしたときにインストールされます。
コードがHerokuにプッシュされたときにng build
を実行するpostinstall
スクリプトを追加します。次の手順で作成するノードサーバーの起動コマンドも追加します。これにより、アプリの静的ファイルがサーバーのdist
ディレクトリに配置され、その後アプリが起動します。
"scripts": {
// ...
"start": "node server.js",
"postinstall": "ng build --aot -prod"
}
// server.js
const express = require('express');
const app = express();
// Run the app by serving the static files
// in the dist directory
app.use(express.static(__dirname + '/dist'));
// Start the app by listening on the default
// Heroku port
app.listen(process.env.PORT || 8080);
heroku create
git add .
git commit -m "first deploy"
git Push heroku master
これは簡単な writeup です。リクエストにHTTPSを強制的に使用させる方法やPathLocationStrategy
:)を処理する方法など、詳細を説明しました。
うまくいけば、これは役立つかもしれません、そしてうまくいけば私は今週中にこれを試してみるでしょう。
forever :と一緒に使います。
ng build --prod --output-path ./dist
にビルドします。Angularアプリケーションパスに server.js ファイルを作成します。
const express = require('express');
const path = require('path');
const app = express();
app.use(express.static(__dirname + '/dist'));
app.get('/*', function(req,res) {
res.sendFile(path.join(__dirname + '/dist/index.html'));
});
app.listen(80);
いつまでも始めてくださいforever start server.js
それで全部です!あなたのアプリケーションは走っているはずです!
何よりもまず、Angular 2アプリを運用サーバーにデプロイするには、アプリがマシン上でローカルに実行されるようにします。
Angular 2アプリはノードアプリとしてデプロイすることもできます。
したがって、ノードエントリポイントファイルserver.js/app.jsを作成します(この例ではexpressを使用しています)。
var express = require('express'),
path = require('path'),
fs = require('fs');
var app = express();
var staticRoot = __dirname + '/';
app.set('port', (process.env.PORT || 3000));
app.use(express.static(staticRoot));
app.use(function(req, res, next){
// if the request is not html then move along
var accept = req.accepts('html', 'json', 'xml');
if(accept !== 'html'){
return next();
}
// if the request has a '.' assume that it's for a file, move along
var ext = path.extname(req.path);
if (ext !== ''){
return next();
}
fs.createReadStream(staticRoot + 'index.html').pipe(res);
});
app.listen(app.get('port'), function() {
console.log('app running on port', app.get('port'));
});
Package.jsonファイルに依存関係として express も追加します。
それからあなたの好みの環境にそれを配置しなさい。
私はIISへの展開のために小さなブログをまとめました。フォロー リンク
アプリケーションをIISにデプロイするには、次の手順に従います。
ステップ1:コマンドng build --prodを使用してAngularアプリケーションをビルドします
ステップ2:ビルド後、すべてのファイルはアプリケーションパスのdistフォルダに保存されます。
手順3: C:\ inetpub\wwwroot に名前を付けて QRCode にフォルダを作成します。
ステップ4:distフォルダの内容を C:\ inetpub\wwwroot\QRCode フォルダにコピーします。
ステップ5: (ウィンドウ+ R) を使用してIIS Managerを開き、 inetmgr と入力して[OK]をクリックします。
ステップ6:デフォルトのWebサイトを右クリックし、 アプリケーションの追加 をクリックします。
ステップ7:エイリアス名 'QRCode' を入力し、物理パスを C:\ inetpub\wwwroot\QRCode に設定します。
ステップ8: index.html ファイルを開き、 href = "\" という行を見つけて、 '\'を削除します。
ステップ9:今、任意のブラウザでアプリケーションを閲覧します。
理解を深めるためにビデオをフォローすることもできます。
ビデオのURL: https://youtu.be/F8EI-8XUNZc
アプリケーションをApache(Linuxサーバー)にデプロイすると、以下のステップに従うことができます。 以下のステップに従ってください :
ステップ1 :ng build --prod --env=prod
ステップ2 。 (distをサーバにコピーして)次にdistフォルダを作成し、distフォルダをコピーしてサーバのルートディレクトリに配置します。
ステップ3 。ルートフォルダに.htaccess
ファイルを作成し、これを.htaccess
に貼り付けます
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>
localhost で私のようなアプリをテストすると、 空白のホワイトページで問題が発生する可能性があります iこれを使用します。
ng build --prod --build-optimizer --base-href="http://127.0.0.1/my-app/"
説明:
ng build
アプリをビルドしますが、スペース、タブなどがたくさんあります。サーバーにとって、コードの外観はそれほど重要ではありません。これが私が使う理由です:
ng build --prod --build-optimizer
これにより、コードが生産用になり、サイズが小さくなります[--build-optimizer
]により、より多くのコードを減らすことができます]。
だから最後に私はアプリケーションを示すために--base-href="http://127.0.0.1/my-app/"
を追加します。それであなたはどんなフォルダーにも複数の角度のあるアプリを持つことができます。
Ahead of Timeコンパイラーでコンパイルすることにより、最小かつ最速のロードプロダクションバンドルを取得し、ここでangular AOTクックブックに示されているように、ロールアップでツリーシェイク/ミニファイします: https:// angular .io/docs/ts/latest/cookbook/aot-compiler.html
これは、以前の回答で述べたように、Angular-CLIでも使用できますが、CLIを使用してアプリを作成していない場合は、クックブックに従う必要があります。
また、AOTクックブックで作成されたバンドルが含まれるマテリアルとSVGチャート(Angular2が支援)の実用例もあります。また、バンドルの作成に必要なすべての構成とスクリプトもあります。こちらをご覧ください: https://github.com/fintechneo/angular2-templates/
AoTコンパイル済みビルドと開発環境のファイル数とサイズの違いを示す簡単なビデオを作成しました。上記のgithubリポジトリのプロジェクトを示しています。ここで見ることができます: https://youtu.be/ZoZDCgQwnmQ
GithubページでのAngular 2の展開
GhpagesでAngular 2 Webpackのデプロイをテストする
最初にあなたのアプリケーションのdist
フォルダーからすべての関連ファイルを入手してください、私のためにそれはそれでした:+ cssファイル+ assets.bundle.js + polyfills.bundle.js + vendor.bundle.js
それからあなたが作成したリポジトリにこのファイルをプッシュします。
1 - アプリケーションをルートディレクトリで実行する場合は、 [yourgithubusername] .github.io という名前の特別なリポジトリを作成し、これらのファイルをマスターブランチにプッシュします。
2 - サブディレクトリまたはルート以外の別のブランチにこれらのページを作成する場合は、ブランチ gh-pages を作成し、それらのファイルをそのブランチにプッシュします。
どちらの場合も、これらのデプロイされたページへのアクセス方法は異なります。
最初の場合は https:// [yourgithubusername] .github.io になり、2番目の場合は [yourgithubusername] .github.io/[リポジトリ名] になります。 。
2番目のケースを使用してデプロイすると仮定した場合、すべてのルートマッピングは指定したパスに依存し、[/ branchname]に設定する必要があるため、必ずdistのindex.htmlファイルのベースURLを変更してください。
このページへのリンク
https://rahulrsingh09.github.io/Deployment
Git Repo
Angular CLI を指定すると、次のコマンドを使用できます。
ng build --prod
アプリケーションをデプロイするために必要なものすべてを含むdistフォルダーが生成されます。
Webサーバーを使った経験がない場合は、 Angular to Cloud を使用することをお勧めします。あなたはただZipファイルとしてdistフォルダを圧縮してプラットフォームにそれをアップロードする必要があります。
AzureでAngular 2を展開するのは簡単です
ng build --prod を実行すると、index.htmlを含むいくつかのファイルにバンドルされたものすべてを含むdistフォルダが生成されます。
その中にリソースグループとWebアプリケーションを作成します。
FTPを使用してdistフォルダファイルを配置します。 Azureでは、アプリケーションを実行するためにindex.htmlを探します。
それでおしまい。あなたのアプリは走っています!
簡単で安価な方法で角度付きアプリをホストするために、私はFirbaseホスティングを使用してきました。最初の段階で無料で、Firebase CLIを使用して新しいバージョンを簡単にデプロイできます。この記事では、プロダクションAngular 2アプリをFirebaseにデプロイするために必要な手順について説明します。 https://medium.com/codingthesmartway-com-blog/hosting-angular-2-applications-on-firebase-f194688c978d
つまり、ng build --prod
を実行すると、パッケージ内にdistフォルダーが作成されます。これがFirebase Hostingにデプロイされるフォルダーです。
2017年の時点で最善の方法はあなたのAngularプロジェクトに angular-cli (v1.4.4)を使うことです。
ng build --prod --env=prod --aot --build-optimizer --output-hashing none
--prodでデフォルトで有効になっているように--aotを明示的に追加する必要はありません。--output-hashingの使用は、キャッシュバーストに関する個人的な好みのとおりです。
以下を追加することで _ cdn _ supportを明示的に追加できます。
--deploy-url "https://<your-cdn-key>.cloudfront.net/"
あなたがホスティングにCDNを使うことを計画しているなら、それはかなり速いです。
私は、角度の前にWeb経験を積んだ多くの人々が彼らのWebアーティファクトを戦争の中で展開するのに慣れていると言うでしょう(すなわちjqueryとhtmlはJava/Springプロジェクトの中で)。角度付きプロジェクトとRESTプロジェクトを別々にしてみた後、CORSの問題を回避するためにこれを行いました。
私の解決策は、CLIで生成されたすべてのangular(4)コンテンツをmy-appからMyJavaApplication/angularに移動することでした。それからMavenのビルドを修正してmaven-resources-pluginを使って内容を/ angular/distから私の配布物のルートに移動しました(すなわち$ project.build.directory}/MyJavaApplication)。 Angularはデフォルトで戦争のルートからリソースをロードします。
私のAngularプロジェクトにルーティングを追加するようになったとき、私はさらに/ distからindex.htmlをWEB-INF/appにコピーするようにmavenビルドを修正しました。そして、すべてのサーバー側の休憩呼び出しをindexにリダイレクトするJavaコントローラーを追加しました。