node.js言語では、パッケージとモジュールの間に本質的な違いはありません。パッケージは、モジュールに基づいたより深い抽象化です。パッケージは、リリース、更新、依存関係管理、バージョンの制御のために特定の独立した関数をカプセル化します。 node.jsは、CommonJSの仕様に従ってパッケージメカニズムを実装し、NPMを開発してパッケージのリリースと取得のニーズを解決します。
Node.jsパッケージは、JSON形式のパッケージ説明ファイルPackage.jsonを含むディレクトリです。 node.jsパッケージは基本的にcommonjs仕様に従うため、次の特性があります。
CommonJS仕様で定義されたパッケージ機能:
1)トップレベルのディレクトリには、package.jsonファイルが含まれています。
2)Bin Directoryはバイナリファイルを保存します。
3)LIBディレクトリはJavaScriptファイルを保存します。
4)Doc Directoryはドキュメントを保存します。
5)テストディレクトリはユニットテストを保存します。
node.jsモジュールとファイルは1つずつ対応します。ファイルは、JavaScriptソースファイルまたはバイナリファイルだけでなく、ディレクトリでもあります。最も単純なパッケージは、ディレクトリモジュールです。
node.jsパッケージは通常、いくつかのモジュールのコレクションであり、モジュールに基づいた高レベルの抽象化を提供します。これは、一部の固定インターフェイス関数ライブラリを提供するのと同等です。
package.jsonをカスタマイズすることで、公開用のより複雑で、より完全で、より標準化されたパッケージを作成できます。
node.jsがパッケージを呼び出すと、最初にパッケージのpackage.jsonファイルのメインフィールドをチェックし、パッケージインターフェイスモジュールとして使用します。 package.jsonファイルのメインフィールドが存在しない場合、node.jsはindex.jsまたはindex.nodeをパッケージインターフェイスとして見つけようとします。
package.jsonファイルは、packecificificationがパッケージを記述するためにCommonjs仕様で使用されるファイルです。仕様に完全に準拠しているPackage.jsonファイルには、次のフィールドが含まれている必要があります。
1)名前:パッケージ名。パッケージ名は一意であり、小文字、数字、アンダースコアで構成されており、スペースを含めることはできません。
2)説明:パッケージの説明。パッケージの簡単な説明。
3)バージョン:バージョン番号。セマンティックバージョン認識仕様を満たすバージョン文字列。
4)キーワード:通常は検索に使用されるキーワード配列。
5)メンテナー:メンテナーアレイ。各要素には、名前、電子メール(オプション)、およびWeb(オプション)フィールドが含まれます。
6)貢献者:貢献者の配列。フォーマットはメンテナー配列と同じです。パッケージ著者は、寄稿者アレイの最初の要素である必要があります。
7)バグ:バグを送信するアドレスは、URLまたは電子メールアドレスにすることができます。
8)ライセンス:ライセンスアレイ。各要素には、タイプ(ライセンス名)とURL(ライセンステキストにリンクされたアドレス)フィールドを含める必要があります。
9)リポジトリ:リポジトリホスティングアドレスの配列。各要素には、型(gitなどのリポジトリのタイプ)、url(リポジトリアドレス)、およびパス(リポジトリパスに対するオプション)を含める必要があります。
10)依存関係:パッケージ依存関係。パッケージ名とバージョン番号で構成される連想配列です。
注:「セマンティックバージョン認識」仕様は、外国が提案する一連のバージョンの命名仕様です。当初の目的は、さまざまなバージョン番号サイズの比較の問題を解決することであり、現在多くのパッケージ管理システムで採用されています。
これは、commonjs仕様に完全に準拠しているパッケージの例です。
コードコピーは次のとおりです。
{
「名前」:「testpackage」、
「説明」:「CommonJSのための私のパッケージ」、
「バージョン」:「0.1.0」、
「キーワード」:[
「テストパッケージ」、
「liq」
]、、
「メンテナー」:[
{
「名前」:「liq」、
「電子メール」:「[email protected]」、
}
]、、
「貢献者」:[
{
「名前」:「liq」、
「web」:「http://blog.csdn.net/chszs」
}
]、、
「バグ」:{
「メール」:「[email protected]」、
「web」:「http://blog.csdn.net/chszs」
}、
「ライセンス」:[
{
「タイプ」:「ApacheライセンスV2」、
「url」: "http://www.apache.org/licenses/apache2.html"
}
]、、
「リポジトリ」:[
{
「タイプ」:「git」、
「url」: "http://github.com/chszs/packagetest.git"
}
]、、
「依存関係」:{
「webkit」: "1.2"、
「SSL」:{
「gnutls」:["1.0"、 "2.0"]、
「OpenSSL」:「0.9.8」
}
}
}