プロジェクトディレクトリ
上記の知識を理解したら、プロジェクト ディレクトリを完全に計画できるようになりました。コマンド ライン プログラムの作成を例に挙げます。通常、コマンド ライン モードと API モードの両方が提供され、コードの作成にはサードパーティのパッケージが使用されます。完全なプログラムには、コードに加えて、独自のドキュメントとテスト ケースも必要です。したがって、標準のプロジェクト ディレクトリは次のようになります。
- /home/user/workspace/node-echo/ # 工程目录 - bin/ # 存放命令行相关代码 node-echo + doc/ # 存放文档 - lib/ # 存放API相关代码 echo.js - node_modules/ # 存放三方包 + argv/ + tests/ # 存放测试用例 package.json # 元数据文件 README.md # 说明文件
一部のファイルの内容は次のとおりです:
/* bin/node-echo */ var argv = require('argv'), echo = require('../lib/echo'); console.log(echo(argv.join(' '))); /* lib/echo.js */ module.exports = function (message) { return message; }; /* package.json */ { "name": "node-echo", "main": "./lib/echo.js" }
上記の例では、さまざまな種類のファイルがカテゴリに保存され、モジュールはサードパーティのパッケージ名を使用して、node_moudles ディレクトリを通じて直接ロードされます。また、package.jsonを定義すると、node-echoディレクトリもパッケージとして利用できます。
NPM
NPM は、NodeJS とともにインストールされるパッケージ管理ツールで、NodeJS コードのデプロイメントにおける多くの問題を解決できます。
ご覧のとおり、NPM は NodeJS 開発者とユーザーが相互に通信できる NodeJS エコシステムを確立しました。以下では、これら 3 つのシナリオで NPM を使用する方法について説明します。
サードパーティのパッケージをダウンロード
サードパーティのパッケージを使用する必要がある場合は、まずどのパッケージが利用可能であるかを知る必要があります。 npmjs.org にはパッケージ名に基づいて検索するための検索ボックスが用意されていますが、使用したいサードパーティ パッケージの名前がわからない場合は、Baidu にお問い合わせください。パッケージ名 (上の例の argv など) がわかったら、プロジェクト ディレクトリでターミナルを開き、次のコマンドを使用してサードパーティ パッケージをダウンロードできます。
$ npm install argv ... argv@0.0.2 node_modules\argv
ダウンロード後、argv パッケージはプロジェクト ディレクトリの下の node_modules ディレクトリに配置されるため、サードパーティ パッケージのパスを指定せずに、コード内で require('argv') のみを必要とします。
上記のコマンドは、デフォルトでサードパーティ パッケージの最新バージョンをダウンロードします。特定のバージョンをダウンロードする場合は、たとえば、バージョン 0.0 をダウンロードできます。次のコマンドを使用して argv の 1 を取得します。
$ npm install argv@0.0.1 ... argv@0.0.1 node_modules\argv
多数のサードパーティ パッケージを使用する場合、ターミナルで 1 つのコマンドを使用して各パッケージをインストールするのは非常に面倒です。したがって、NPM は package.json のフィールドを拡張して、サードパーティのパッケージの依存関係をその中で宣言できるようにしました。したがって、上記の例の package.json は次のように書き換えることができます:
{ "name": "node-echo", "main": "./lib/echo.js", "dependencies": { "argv": "0.0.2" } }
このように処理した後、npm install コマンドを使用して、プロジェクト ディレクトリにサードパーティ パッケージをバッチ インストールできます。さらに重要なことは、将来、node-echo も NPM サーバーにアップロードされ、他の人がこのパッケージをダウンロードすると、NPM は、パッケージ内で宣言されているサードパーティ パッケージの依存関係に基づいて、さらに依存するサードパーティ パッケージを自動的にダウンロードします。たとえば、npm install node-echo コマンドを使用すると、NPM は次のディレクトリ構造を自動的に作成します。
- project/ - node_modules/ - node-echo/ - node_modules/ + argv/ ... ...
この方法では、ユーザーは直接使用するサードパーティのパッケージについてのみ注意する必要があり、すべてのパッケージの依存関係を自分で解決する必要はありません。
コマンドラインプログラムをインストールします
NPM サービスからコマンド ライン プログラムをダウンロードしてインストールする方法は、サードパーティ パッケージの方法と似ています。たとえば、上記の例の node-echo はコマンド ラインの使用方法を提供します。node-echo が関連する package.json フィールドを構成している限り、ユーザーは次のコマンドを使用するだけでプログラムをインストールできます。
$ npm install node-echo -g
パラメータの -g はグローバル インストールを示すため、node-echo はデフォルトで次の場所にインストールされ、NPM は Linux システムで必要なソフト リンク ファイル、または Windows システムで必要な .cmd ファイルを自動的に作成します。
- /usr/local/ # Linux系统下 - lib/node_modules/ + node-echo/ ... - bin/ node-echo ... ... - %APPDATA%\npm\ # Windows系统下 - node_modules\ + node-echo\ ... node-echo.cmd ...
郵便番号
NPM を使用して初めてコードを公開する前に、アカウントを登録する必要があります。ターミナルで npm adduser を実行し、プロンプトに従います。アカウントを設定したら、package.json ファイルを編集し、NPM に必要なフィールドを追加する必要があります。上記のノードエコーの例に従って、package.json に必要なフィールドは次のとおりです。
{ "name": "node-echo", # 包名,在NPM服务器上须要保持唯一 "version": "1.0.0", # 当前版本号 "dependencies": { # 三方包依赖,需要指定包名和版本号 "argv": "0.0.2" }, "main": "./lib/echo.js", # 入口模块位置 "bin" : { "node-echo": "./bin/node-echo" # 命令行程序名和主模块位置 } }
之後,我們就可以在 package.json 所在目錄下執行 npm publish 發布程式碼了。
版本號碼
使用 NPM 下載和發佈程式碼時都會接觸到版本號。 NPM 使用語意版本號來管理程式碼,這裡簡單介紹一下。
語意版本號分為 X.Y.Z 三位,分別代表主版本號、次版本號和補丁版本號。當程式碼變更時,版本號碼會依照下列原則更新。
+ 如果只是修復bug,需要更新Z位。
+ 如果是新增了功能,但是向下相容,需要更新Y位元。
+ 如果有大變動,向下不相容,需要更新X位元。
版本號碼有了這個保證後,在申明三方包依賴時,除了可依賴一個固定版本號外,還可依賴某個範圍的版本號。例如"argv": "0.0.x"表示依賴 0.0.x 系列的最新版 argv。 NPM 支援的所有版本號範圍指定方式可以查看官方文件。
靈機一點
除了本章介紹的部分外,NPM 還提供了許多功能,package.json 裡也有很多它有用的欄位。除了可以在 npmjs.org/doc/ 查看官方文件外,這裡再介紹一些 NPM 常用指令。
NPM 提供了許多指令,例如 install 和 publish,使用 npm help 可查看所有指令。