現在位置: ホーム / みらくるブログ / Node.js+ExpressでAngular用のコンテンツをサーブする

Node.js+ExpressでAngular用のコンテンツをサーブする

いわゆるMEANスタックの構成用に、Angularのブラウザ用コンテンツをNode.js + Expressで提供する方法を紹介します。また、ソースを変更したときに、自動的にビルドとサーバを再起動する方法も合わせて説明します。

Angularソースのビルド

本連載のAngularでマウスイベントをハンドルで使用したサンプルアプリをNodejs + Expressと一緒に使用します。とは言っても複雑なことはせず、ビルドしたAngular用のソース(JavaScriptにトランスパイルされたファイル)を静的に提供するだけです。

まず、app1ディレクトリで以下のコマンドを実行します。 

$ ng build

すると、distディレクトリといつくかのファイルが作成されます。

$ ls dist/
favicon.ico index.html inline.bundle.js inline.bundle.js.map main.bundle.js main.bundle.js.map polyfills.bundle.js polyfills.bundle.js.map styles.bundle.js styles.bundle.js.map vendor.bundle.js vendor.bundle.js.map

Nodejs + Expressのソースコード

app1と同じレベルに、ソースコード用のディレクトリserverを作成します。おおよそのディレクトリ階層のイメージは次のとおりです。

app1
|-- src
| `--app
|-- dist
serve
├ serve.js

serve.jsのソースコードは次のとおりです。

var express = require("express");
var app = express();
app.use(express.static(__dirname + '/../app1/dist/'));
var server = app.listen(3000, function(){
  console.log("Started. Port:" + server.address().port);
});

実行します。

$ node serve.js
Started. Port:3000

ブラウザでhttp://bottle.local:3000/をアクセスすると、無事Angularで作ったアプリの画面が表示されました。

Expressで

ソース変更で自動リロード

ソースを変更した時、自動的にビルドとサーバを再起動する方法を紹介します。

Angular用のソースを自動でビルドするには、app1ディレクトリで次のように-wオプションを付けてbuildを実行します。

$ ng build -w

次はサーバの自動再起動するための設定です。必要なモジュールをインストールします。

$ npm install reload watch

そして、serve.jsを次のように変更します。

var express = require("express");
var http = require('http')
var reload = require('reload')
var watch = require('watch')
var app = express();
app.use(express.static(__dirname + '/../app1/dist/'));

var server = http.createServer(app)
var reloadServer = reload(server, app);
watch.watchTree(__dirname + "/../app1/dist", function (f, curr, prev) {
  reloadServer.reload();
});

server.listen(3000, function(){
  console.log("Started. Port:" + server.address().port);
});

そして、先ほどと同じようにnpmから起動します。

$ node serve.js

 この状態でAngular用のソース(例えば、app.component.html)を変更すると自動的にリビルドされ、それをトリガーにサーバが再起動します。ブラウザをリロードすると、変更後の画面が表示されます。