web-dev-qa-db-ja.com

Node.js package.jsonメインパラメーター

すでにかなりの検索を行っています。ただし、Node.jsのpackage.jsonのメインパラメータについてはまだ疑問があります。

  1. このフィールドに入力するとどうなりますか?別の方法で尋ねると、このフィールドが表示されている場合、別のスタイルでモジュールを開始できますか?
  2. メインパラメータに複数のスクリプトを入力できますか?はいの場合、2つのスレッドとして開始されますか?いいえの場合、モジュールで2つのスクリプトを開始し、それらを並行して実行するにはどうすればよいですか?

2番目の質問は非常に奇妙であることを知っています。 OpenShiftでNode.jsアプリケーションをホストしているが、アプリケーションは2つの主要コンポーネントで構成されているためです。 1つはREST AP​​Iで、も​​う1つは通知配信サービスです。

通知配信プロセスが単一スレッドとして実装されている場合、REST AP​​Iをブロックするのではないかと心配しています。ただし、同じMongoDBカートリッジに接続する必要があります。さらに、可能であれば両方のコンポーネントを同じギアで使用できる場合は、1つのギアを節約したいと思います。

どんな提案でも大歓迎です。

117
Gavin

npm documentation から:

メインフィールドは、プログラムへの主要なエントリポイントであるモジュールIDです。つまり、パッケージの名前がfooで、ユーザーがそれをインストールしてからrequire( "foo")を実行すると、メインモジュールのexportsオブジェクトが返されます。

これは、パッケージフォルダーのルートに相対的なモジュールIDである必要があります。

ほとんどのモジュールでは、メインスクリプトを使用するのが最も理にかなっており、多くの場合、他のスクリプトはあまり使用しません。

短く言えば:

  1. パッケージへのエントリポイントがルートフォルダ内のpackage.jsonと異なる場合は、index.jsmainパラメーターのみが必要です。たとえば、多くの場合、エントリポイントをlib/index.jsまたはlib/<packagename>.jsに配置します。この場合、対応するスクリプトはpackage.jsonmainとして記述する必要があります。
  2. エントリポイントrequire('yourpackagename')を明確に定義する必要があるため、mainとして2つのスクリプトを使用することはできません。
121
bredikhin

最初の質問に答えるために、モジュールをロードする方法は、モジュールエントリポイントと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')

38
Bastien

たとえばpackage.jsonファイルにある場合:

{
"name": "zig-zag",
"main": "lib/entry.js",
...
}

lib/entry.jsは、パッケージのメインエントリポイントになります。電話するとき

require( 'zig-zag' );

ノードでは、lib/entry.jsは必要な実際のファイルです。

17
prosti

mainキーの重要な機能の1つは、エントリポイントへのパスを提供することです。これは、nodemonを扱うときに非常に役立ちます。 nodemonで作業し、package.jsonと言うように"main": "./src/server/app.js"mainキーを定義している場合、nodemonと入力するだけでサーバーを起動できます。 CLIで、rootをpwdとしての代わりにnodemon ./src/server/app.js

7
Akash

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

0
ʀɣαɳĵ

それを「出発点」と考えてください。

C#などのオブジェクト指向プログラミングの意味では、それはオブジェクトクラスのinit()またはコンストラクターです。これが「エントリポイント」の意味です。

例えば

public class IamMain  // when export and require this guy
{
    public IamMain()  // this is "main"
    {...}

    ...   // many others such as function, properties, etc.
}
0
Jeb50