Express 4.xで「./bin/www」は何をしますか?


157

Node.jsアプリでExpress 4.0について学び始めたところ./bin/www、アプリケーションサーバーとポートの設定のみが書き込まれ、ミドルウェアやルーティングなどのすべてが./app.jsファイルで定義されているファイルが生成されていることがわかりました。

ただし、これ./bin/wwwが何をするかはわかりません。私はExpress 3.xを使用しており、サーバーとポートの設定、ルーティングとミドルウェアを同じ./app.jsファイルで常に定義し、でノードアプリを起動しましたnode app.js。それで、使用のポイントは何./bin/wwwですか?サーバーとポートの定義を他の定義から分離するだけですか?

現在、express-generatorを使用してパッケージを作成すると、package.jsonには次の定義が含まれます。

"scripts": {
    "start": "node ./bin/www"
}

ただし、を使用してアプリを起動する必要があるのかnode ./bin/www、またはを使用する必要があるのでしょうかnpm start。アプリを起動するにはどのコマンドを実行すればよいですか?

また、アプリをherokuにデプロイするときに、Procfileファイルに何を書き込む必要がありますか?でweb: node app.js十分?


回答:


131

ではエクスプレス3.0は、通常使用するapp.configure()(またはapp.use()あなたが必要とする必要なミドルウェアを設定すること)。指定したミドルウェアはExpress 3.0にバンドルされています。

例:

var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.compress());
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());

ではエクスプレス4.0ただし、すべてのミドルウェアは、このように、彼らは(あなたが見るものを別々に呼び出される必要がある、彼らは維持され、(静的なミドルウェアを除く)コアExpressから独立して更新できるように削除されましたapp.js)。

bin/ディレクトリは、あなたの様々な定義できる場所となって起動スクリプトを。これwwwは、ExpressアプリをWebサーバーとして起動する例です。

最終的には、次のようなさまざまなスクリプトを持つことができteststopまたはrestart、などこのような構造を持つことにすべてを詰め込むせずに、あなたは別のスタートアップコンフィギュレーションを持つことができますapp.js

Expressアプリを起動する正しい方法は次のとおりです。

npm start

Express 4.xアプリをHerokuにデプロイするには、これを以下に追加しますProcfile

web: npm start

または、起動スクリプトをで使用できる場合package.json、herokuは自動的にそれを使用します。詳細はこちら

"scripts": {
    "start": "node ./bin/www",
}

6
ありがとう。最後の2つの段落に関する優れた説明で、ようやくを使用する意味がわかりましたwww。なぜそのように名付けられたのかはわかりませんが、World Wide Webにちなんで付けられたのでしょうか。
Blaszard 2014

1
@ NicolasS.Xu ExpressJSのGithubリポジトリgithub.com/visionmedia/expressで、[クイックスタート]セクションまでスクロールします
Andy

4
@Vedなぜ「ビン」なのですか?これをバイナリ実行可能ファイルと関連付けます。
regularmike、2014年

2
@regularmikeおそらく、「実行可能」スクリプトを意味することもあります(Linuxの環境など)
Andy

2
@Vedはい、それはずっと前に実行可能ファイルを意味するように進化したようです。Python、Perl、およびunix / linuxで一般的に使用されます。
regularmike 2014年

10

Express 3.xのようなノードアプリは非標準の起動ファイルを使用しapp.jsますが、実行するには間違ったファイルです。

package.json 持っている

   "scripts": {
     "start": "node ./bin/www"
   }

これは、起動コマンドラインを示しています。これには、スターターファイルへのパスだけでなく、完全なコマンドラインが含まれている可能性があるため、簡単ではありません。


この質問に答えるのを手伝ってくれませんか?ありがとうございました!
Nicolas S.Xu 2014年

6
なぜそれはビンと呼ばれるのですか?バイナリは含まれていません。。。
Kinnard Hockenhull 2017

2

express-generatorを使用している場合は、ローカルファイルを見てください。./bin内にファイル./binがありwwwます。したがって、を実行するとnode ./bin/www、node.jsはwwwファイルでコードを実行します。派手なものは何もありません。


Azureアプリサービスにデプロイする場合は、web.configを作成し、すべてのindex.jsをbin / wwwで置き換える必要があります。これは、ドキュメントgist.github.com/rseroter/79ad73f5e6e20b029f765ca8b34f4fad
Bishoy Hanna

1

Windowsでは、次のコマンドを使用します。

DEBUG = myapp:*&npm startを設定し、ブラウザにhttp:// localhost:3000 /をロードしてアプリにアクセスします。


4
SOへようこそ!私はこれが当面の質問に本当に答えるとは思いません。質問をもう一度読んで、オリジナルのポスターが求めていることをすべて理解してください。
ジェイク

0

上記のすべてがうまく答えました。ただし、node app.jsExpress 3. *のようなバージョンのみを使用する場合。以下に従うことができます:

Express 4ジェネレーターによって生成されたapp.jsファイルはNode.jsモジュールになっているため、アプリを個別に起動することはできません(コードを変更しない限り)。モジュールはNode.jsファイルにロードされ、Node.jsファイルを介して開始される必要があります。この場合、Node.jsファイルは./bin/wwwです。詳細については、公式ドキュメントをご覧ください。

Expressアプリの作成やアプリの起動には、binディレクトリも拡張子のないwwwファイルも必須ではありません。これらはジェネレーターによる提案にすぎないため、ニーズに合わせて自由に変更してください。

wwwディレクトリを取り除き、「Express 3 way」を維持するには、module.exports = app;を示す行を削除します。app.jsファイルの最後に、次のコードをその場所に貼り付けます。

app.set('port', process.env.PORT || 3000)

app.listen(app.get('port'), () => {
  console.log(`Express server listening on port ${app.get('port')}`);
})

次に、package.jsonファイルを変更"start": "node ./bin/www"します。以降、。/ bin / wwwの機能をapp.jsに戻しました。次に、Expressアプリの実行にを使い始めます。"start": "node app.js"


-1

これをProcfileに入れてweb: node ./bin/www 、で動作するかどうかを確認しforeman startます。アプリはポート5000で利用可能である必要があります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.