すでにかなりの検索を行っています。ただし、Node.jsのpackage.jsonのメインパラメータについてはまだ疑問があります。
2番目の質問は非常に奇妙であることを知っています。 OpenShiftでNode.jsアプリケーションをホストしているが、アプリケーションは2つの主要コンポーネントで構成されているためです。 1つはREST APIで、もう1つは通知配信サービスです。
通知配信プロセスが単一スレッドとして実装されている場合、REST APIをブロックするのではないかと心配しています。ただし、同じMongoDBカートリッジに接続する必要があります。さらに、可能であれば両方のコンポーネントを同じギアで使用できる場合は、1つのギアを節約したいと思います。
どんな提案でも大歓迎です。
メインフィールドは、プログラムへの主要なエントリポイントであるモジュールIDです。つまり、パッケージの名前がfooで、ユーザーがそれをインストールしてからrequire( "foo")を実行すると、メインモジュールのexportsオブジェクトが返されます。
これは、パッケージフォルダーのルートに相対的なモジュールIDである必要があります。
ほとんどのモジュールでは、メインスクリプトを使用するのが最も理にかなっており、多くの場合、他のスクリプトはあまり使用しません。
短く言えば:
package.json
と異なる場合は、index.js
にmain
パラメーターのみが必要です。たとえば、多くの場合、エントリポイントをlib/index.js
またはlib/<packagename>.js
に配置します。この場合、対応するスクリプトはpackage.json
でmain
として記述する必要があります。require('yourpackagename')
を明確に定義する必要があるため、main
として2つのスクリプトを使用することはできません。最初の質問に答えるために、モジュールをロードする方法は、モジュールエントリポイントとpackage.jsonのメインパラメーターに依存します。
次のファイル構造があるとしましょう:
my-npm-module
|-- lib
| |-- module.js
|-- package.json
package.jsonにメインパラメータがない場合、モジュールエントリポイントrequire('my-npm-module/lib/module.js')
を指定してモジュールをロードする必要があります。
次のようにpackage.jsonメインパラメータを設定すると、"main": "lib/module.js"
のように、この方法でモジュールをロードできます:require('my-npm-module')
。
たとえばpackage.json
ファイルにある場合:
{
"name": "zig-zag",
"main": "lib/entry.js",
...
}
lib/entry.js
は、パッケージのメインエントリポイントになります。電話するとき
require( 'zig-zag' );
ノードでは、lib/entry.js
は必要な実際のファイルです。
main
キーの重要な機能の1つは、エントリポイントへのパスを提供することです。これは、nodemon
を扱うときに非常に役立ちます。 nodemon
で作業し、package.json
と言うように"main": "./src/server/app.js"
でmain
キーを定義している場合、nodemon
と入力するだけでサーバーを起動できます。 CLIで、rootをpwdとしての代わりにnodemon ./src/server/app.js
。
OpenShiftの場合、(アプリケーションごとに)バインドするPORTとIPのペアを1つだけ取得します。各サービスエンドポイントに内部ルートを追加することにより、単一のnodejsインスタンスから両方のサービスを提供できるはずです。
OpenShiftがプロジェクトのpackage.jsonを使用してアプリケーションを開始する方法についての情報があります: https://www.openshift.com/blogs/run-your-nodejs-projects-on-openshift-in-two -simple-steps#package_json
それを「出発点」と考えてください。
C#などのオブジェクト指向プログラミングの意味では、それはオブジェクトクラスのinit()またはコンストラクターです。これが「エントリポイント」の意味です。
例えば
public class IamMain // when export and require this guy
{
public IamMain() // this is "main"
{...}
... // many others such as function, properties, etc.
}