私はNode.jsプログラミングを初めて使用し、最近(mongoDBを使用したエクスプレス、バックボーン、その他の無料のビューテクノロジー)を使用してサンプルの動作Webアプリケーションを作成しました。今、私はステージング環境に同じものを展開したいと思っていますが、このアプリケーションをパッケージ化して同じものを配布する方法がわかりません。 [mongoDbの面倒を見て、個別に設定できます]
私はJavaの世界から来ました。そこで、サーブレットコンテナにデプロイされたWebアプリケーション用の再利用可能なライブラリとwar/earパッケージ用のjarを作成します。この場合、node.js自体もWebコンテナとして機能するため、webappをパッケージ化するにはどうすればよいですか?
PS:今のところ、必要なすべてのソースファイルをステージング環境に手動でコピーし、npmコマンドを実行してそのマシンのすべての依存関係をダウンロードし、「永久」または他のメカニズムを使用してserver.jsを実行することを考えています。 (また、アプリがクラッシュして永遠に失敗する場合のために、何らかの監視を追加します)それが正しい方法かどうかわかりませんか?この問題に対処するための標準化された方法がなければならないと確信しています。
標準化された方法はありませんが、あなたは正しい軌道に乗っています。 package.json
が最新の状態に保たれている場合は、node_modules
を除いて、アプリのディレクトリを運用システムにコピー/ Zip /クローンするだけで済みます。
実動システムで、npm install
を実行して依存関係をインストールします。テストがある場合はnpm test
、最後にNODE_ENV=production node server.js
私が非常に役立つと考えた最近のスライドには、永遠のようなラッパーのトピックも含まれています here を見つけることができます。
Node.js
アプリケーションのデプロイは非常に簡単です。 Mavenには、pom.xml
があります。 Node.js
の関連概念はpackage.json
です。 package.json
への依存関係を述べることができます。 package.json
で環境設定を行うこともできます。たとえば、開発環境では、それを言うことができます
単体テストを実行したい。
しかし、生産中;
単体テストをスキップしたい。
.m2
フォルダーの下にmavenのローカルリポジトリがあります。 Node.jsでは、Node.jsプロジェクトの下にnode_modules
フォルダーがあります。モジュールフォルダーとその名前を確認できます。
この答えのgrunt
の部分に行きましょう。 Grunt
は、フロントエンドアセット、html、javascript、cssのタスクマネージャーです。たとえば、展開する前に、html、css、javascript、さらに画像を縮小できます。 grunt
タスク実行関数をpackage.json
に配置することもできます。
サンプルアプリケーションをご覧になりたい場合は、サンプルブログアプリケーション here をご覧ください。参照用にフォルダー構造とpackage.json
を確認してください。
展開については、スタートアップアプリケーション用のheroku展開をお勧めします。 howto here を見つけることができます。これは単純なgitベースの展開です。
プロジェクトの実行部分で、環境NODE_ENV=development
およびnode app.js
を設定するだけです。ここにapp.js
がプロジェクトにあります。
Javaとnodejsの相対的な概念は次のとおりです。
maven clean install
=> npm install
.m2
フォルダー=> node_modules
(プロジェクトフォルダーの下)mvn test
=> npm test
(package.json
のテストセクション)junit
、powermock
、... => mocha 、 node-unit 、...Spring MVC
=> Express.JSpom.xml
=> package.json
import package
=> require('module_name')
- Expressを使用して構築されたパッケージングノードwebappsの標準形式/ガイドラインはありますか? (ノードアプリ用の同様のjar/warパッケージシステムはありますか?)
はい、 CommonJSパッケージ仕様 :
この仕様では、CommonJSプログラムおよびライブラリを配布するためのCommonJSパッケージ形式について説明します。 CommonJSパッケージは、モジュール、コード、およびその他のアセットのコレクションを単一の形式にまとめたラッピングです。 CommonJSコンポーネントの便利な配信、インストール、管理の基盤を提供します。
次の質問:
2.パッケージ化したら、どのようにデプロイしますか?それは独自のコンテナでもあるので、exeになりますか?
生産のために Herok に展開するHüseyinの提案を2回目にします。開発とステージングには、それぞれ Node-Appliance をVirtualBoxとAmazon EC2で使用します。
このプログラムは、build-debian-cloudまたはDebian-VirtualBox-Applianceによって構築されたDebianマシンを取得し、それをNode.jsの「アプライアンス」に変換し、git経由でデプロイされるNodeアプリケーションを実行できます。
Webアプリはexe
になりません。
これが解決策を探している人に役立つことを願っています。Node jsアプリのパッケージ化は「npm pack」コマンドを使用して実行できます。本番/ステージング環境で実行できるアプリケーションのZipファイルを作成します。 。
これにアプローチするいくつかの方法:
コード以外のすべて(node_modules/**
)を除くGitリポジトリにコードをプッシュしてから、ステージング環境にプルし、npm install
を実行してすべての依存関係を復元します
nPMパッケージを作成し、npm
を介してステージング環境にインストールします(これにより、すべての依存関係も処理されるはずです)
ステージング環境への手動コピー/ sshファイル(これはGrunt
で自動化できます)、npm
を使用して依存関係を復元します
Zeitのpkgモジュールを使用しました。 linux/win/macos用のクロスプラットフォームの成果物を作成できます。実際に本番環境で使用しており、問題なく動作します。
すべてのjsスクリプトを取り込み、単一のファイルにパッケージ化します。
私がそれを使用した理由は、ソースコードの保護に役立つからです。顧客環境での本番環境では、ソースコードではなくアプリケーションにアクセスできます。
また、利点の1つは、実稼働環境では、ノードバイナリもビルド内にパッケージ化されるため、実際に顧客にnode.jsをインストールさせる必要がないことです。