web-dev-qa-db-ja.com

アプリを起動するときの「npm start」と「node app.js」の違いは?

コマンドexpress new 'filename'を使用してアプリケーションをインストールしました。次を使用してアプリケーションを開始できることを学びました。

npm start

これまで私は使用しました:

node app.js

サーバーを起動します。誰が2つの違いが知っていますか?ありがとう。

177
ReneGAED

manページ から、npm start:

パッケージの「開始」スクリプト(提供されている場合)を実行します。バージョンが指定されていない場合、「アクティブ」バージョンが開始されます。

確かに、その説明はまったく役に立たないので、それだけです。少なくとも、socket.ioよりも文書化されています。

とにかく、実際に起こるのは、npmが package.json ファイルを見て、

"scripts":{"start": "coffee server.coffee"}

それはそれを行います。 npmが開始スクリプトを見つけられない場合、デフォルトは次のとおりです。

node server.js

249
Yusuf X

ドキュメントが更新されました 。私の答えには、受け入れられた答えと比べて大幅な変更があります。ドキュメントが最新であることを反映したかったため、受け入れられた答えにはいくつかの壊れたリンクがあります。

また、受け入れられた答えが「デフォルトはnode server.js」と言ったとき、私は理解していませんでした。ドキュメントはデフォルトの動作を明確にしていると思います:

npm-start

パッケージを開始する

あらすじ

npm start [-- <args>]

説明

これにより、パッケージの「start」オブジェクトの「scripts」プロパティで指定された任意のコマンドが実行されます。 「start」プロパティに「scripts」プロパティが指定されていない場合、node server.jsを実行します。

要約すると、npm startを実行すると、次の2つのいずれかを実行できます。

  1. npm start {command_name}:任意のコマンドを実行します(つまり、package.jsonのstartオブジェクトのscriptsプロパティでそのようなコマンドが指定されている場合)
  2. npm startstartプロパティが存在しない場合(またはcommand_nameが渡されない場合):node server.jsを実行します(これはが適切でない場合があります。たとえば、OPにはserver.jsがありません。OP nodeapp.js)を実行します
  3. 私は2つのアイテムのみをリストすると言いましたが、他の可能性もあります(つまりエラーの場合)。たとえば、package.jsonを実行するディレクトリにnpm startがない場合、エラーが表示される場合があります:npm ERR! enoent ENOENT: no such file or directory, open '.\package.json'
9
The Red Pea