「npm start」を使用する場合と「ng serve」を使用する場合


157

ng serve Angularプロジェクトを開発サーバー経由で提供する

 

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

ng serve組み込みサーバーをnpm start起動するのに対し、ノードサーバーを起動するようです。

誰かがそれに光を当てることはできますか?


1
あなたstartscriptsオブジェクトのそのコマンドが何をするのを見ましたかpackage.json?どうして全然違いがあると思いますか?
jonrsharpe 2016年

回答:


205

npm startファイル内のオブジェクトのstartコマンドに対して定義したものは何でも実行します。scriptspackage.json

したがって、次のような場合:

"scripts": {
  "start": "ng serve"
}

その後、npm start実行されますng serve


また、OPがすでに持っていた引用によると、「スクリプト」オブジェクトで「開始」プロパティが指定されてnode server.jsいない場合、それは実行されます(そのファイルがない場合は失敗します)。
jonrsharpe 2016年

1
そうです、angular-cliは初期化時にstartコマンドを作成するため、変更していない場合は同じコマンドになるはずです。
Puigcerber 2016年

7
注:使用することnpm startをお勧めします。使用ng serveするには、angular cliをグローバルにインストールするか、ノードモジュールビンから参照する必要があります。
Kyle Pfromer 2017

43

CLIを使用しているプロジェクトの場合、通常はng serveを使用します。それ以外の場合は、npm startを使用することをお勧めします。ここで詳細な説明:

サーブ

プロジェクト役立つ特に使用して、角度のCLIを使用して作成された「アンギュラCLI意識」、すなわちAプロジェクトを:

ng new app-name

したがって、CLIを使用してプロジェクトを足場設定している場合は、おそらくng serveを使用する必要があります。

npmスタート

これは Angular CLI対応ではないプロジェクトの場合に使用できます(または、Angular CLI対応のプロジェクトに対して「ng serve」を実行するために単に使用できます)。

他の回答が述べるように、これは識別子「start」を持つpackage.jsonからnpmコマンドを実行するnpmコマンドであり、単に「ng serve」を実行する必要はありません。package.jsonに次のようなものを含めることができます。

   "scripts": {
     "build:watch": "tsc -p src/ -w",
     "serve": "lite-server -c=bs-config.json",
     "start": "concurrently \"npm run build:watch\" \"npm run serve\""
     ...
   },
   "devDependencies": {
     "concurrently": "^3.2.0",
     "lite-server": "^2.2.2",

この場合、「npm start」を実行すると、次のコマンドが実行されます。

concurrently "npm run build:watch" "npm run serve"

これにより、TypeScriptコンパイラ(コードの変更を監視)が同時に実行され、Node lite-server(BrowserSyncを使用)が実行されます。


1
あなたが反対票を投じた唯一の理由は、あなたがマークされた回答で言われたことを多かれ少なかれ繰り返したためかもしれないと思います。
Kostrzak

1
私は、どちらか一方をいつ使用するかを説明する1文のステートメントから始めて、その後、提供した内容でフォローすることをお勧めします。私はまず始めます...小さなプロジェクトでは、それらは同じものにすることができ、npm startは単にng serveを実行することができます。プロジェクトが大きくなった場合、またはより多くの手順が必要な場合、npm startは、アプリケーションを起動/実行するためのnpm標準です。私はほとんど答えを提供し、それからあなたが提供したものを読んだ後、必要はないことに気づきました。あなたの答えはとても良かった。
PatS 2018年

13

ドキュメントから

npm-start

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

つまり、package.json内の開始スクリプトを呼び出します

"scripts": {
"start": "tsc && concurrently \"npm run tsc:w\" \"npm run lite --baseDir ./app --port 8001\" ",
"lite": "lite-server",
 ...
}

ngサーブ

angular / angular-cliによって提供され、angular-cliによって作成されたangular2アプリを起動します。angular-cliをインストールすると、ng.cmdがC:\Users\name\AppData\Roaming\npm(Windowsの場合)作成され、実行されます。"%~dp0\node.exe" "%~dp0\node_modules\angular-cli\bin\ng" %*

だから、使用してnpm startあなたがされ、独自の実行作ることができるng serve唯一の角度-CLIのですが

参照:ng serveを実行するとどうなりますか?


またはそれは与えるかもしれませんnpm ERR! missing script: start
レオ

1

それ以上のものがあります。実行される実行可能ファイルは異なります。

npm run start

node_modules / .binにあるプロジェクトのローカル実行可能ファイルを実行します。

ng serve

グローバルな別の実行可能ファイルを実行します。

つまり、angular-cliバージョン5で作成されたAngularプロジェクトを複製してインストールし、グローバルcliバージョンが7の場合、ngビルドで問題が発生する可能性があります。


0

ngコマンドなしで別のマシンから移植された角度アプリを実行したい場合はpackage.json、次のように編集します

"scripts": {
    "ng": "ng",
    "start": "node node_modules/.bin/ng serve",
    "build": "node node_modules/.bin/ng build",
    "test": "node node_modules/.bin/ng test",
    "lint": "node node_modules/.bin/ng lint",
    "e2e": "node node_modules/.bin/ng e2e"
  }

最後に通常のnpm startコマンドを実行して、ビルドサーバーを起動します。

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