web-dev-qa-db-ja.com

nodejsデプロイメントのベストプラクティス-node_modulesをサーバーに直接移動するか、npm installコマンドを実行する

Nodejsアプリケーションをデプロイするためのベストプラクティスは何ですか?

1)node_modulesフォルダーを開発サーバーから実稼働サーバーに直接移動します。これにより、実稼働環境でも同じローカル環境を作成できます。ノードモジュールにリモートで加えられた変更がコードに影響を与えることはありません。

2)package.jsonを使用して、本番サーバーでnpm installコマンドを実行します。ここでの問題は、ノードモジュールの変更がコードに影響を与えることです。ループバックモジュールでいくつかの問題に直面しました( issue link )。

誰か助けてもらえますか?

18

ランニング npm install特定のシナリオ(コンパイルツールの欠如、インターネットアクセスの制限など)で本番サーバーで実行できません。また、同じプロジェクトを複数のマシンにデプロイする必要がある場合、CPU、メモリ、帯域幅の浪費になる可能性があります。

npm install --production同じライブラリとノードバージョンの本番サーバーがインストールされているマシンで、node_modulesを圧縮して本番サーバーにデプロイします。また、package-lock.jsonファイルでバージョンを特定します。

このアプローチでは、開発パッケージを使用してコードをビルド/テストし、実際のデプロイの前にnode_modulesをプルーニングすることもできます。

5
DBellavista

私の推測では、この質問をすると、package.jsonファイルの要点がよくわかりません。

Package.jsonファイルは、この目的(つまり、npmレジストリへのアップロード)、つまりかなりの数の依存関係を一緒に転送する必要のないノードパッケージの転送を目的としています。

neverは手動でnode_modulesディレクトリを手動で移動する必要があると言って限ります。

運用サーバーでは必ずnpm installコマンドを使用してください。これが適切な方法です。ローカル環境と比較してnode_modulesディレクトリが変更されないようにするには、package lockファイルを使用します。これは、node_modulesのソースコードへの変更を最小限に抑えるのに役立ちます。

これは悪い意図ではない

2
harryparkdotio
  • Node_modulesフォルダーの移動は過剰です。
  • ランニング npm installは、バージョンの依存関係を壊す可能性があります。
  • 最善の方法はnpm ci。 package_lockファイルを使用し、バージョンを変更せずに必要な依存関係をインストールします。 npm ciは継続的インテグレーションプロジェクトを意味します。 [〜#〜]リンク[〜#〜]
1
Raj Sahoo

私はASP.NET Core開発者ですが、最近Node.jsアプリでの作業を開始しました。私にとって、これはnode_modulesフォルダを本番環境に移行する際に言及した課題の1つでした。フォルダー全体を運用サーバーに移動したり、運用サーバーでnpm installコマンドのみを実行したりする代わりに、Webpackを使用してNode.jsアプリを単一/複数のバンドルにバンドルする方法を見つけて試しました。 node_modulesフォルダーを管理する必要がなくなりました。アプリで使用/参照されている必要なnode_modulesパッケージのみを取得し、アプリコードと一緒に単一のファイルにバンドルします。node_modulesフォルダー全体を移動せずに、その単一のファイルを本番環境にデプロイします。

私の場合はこのアプローチが有用であることがわかりましたが、これがアプリのパフォーマンスに関して正しい方法ではない場合や、このアプローチの短所がある場合は教えてください。

1
Ali Shahzad

絶対に npm install。しかし、アプリのデプロイに関しては、自分の手でこれを行うべきではありません。

PM2 のように、このためのツールを使用します。

パッケージの変更に関する懸念については、簡単な答えはpackage-lock.json

1
tniezurawski