NPM是隨同NodeJS一起安裝的包管理工具,能解決NodeJS代碼部署上的很多問題,常見的使用場景有以下幾種: 允許用戶從NPM伺服器下載別人編寫的三方包到本地使用。 允許用戶從NPM伺服器下載並安裝別人編寫的命令行程式到本地使用。 允許用戶將自己編寫的包或命令行程式上傳到NPM伺服器供別人使用。 ...
NPM是隨同NodeJS一起安裝的包管理工具,能解決NodeJS代碼部署上的很多問題,常見的使用場景有以下幾種:
-
允許用戶從NPM伺服器下載別人編寫的三方包到本地使用。
-
允許用戶從NPM伺服器下載並安裝別人編寫的命令行程式到本地使用。
- 允許用戶將自己編寫的包或命令行程式上傳到NPM伺服器供別人使用。
舉個慄子,當我們如下創建了一個工程:
- /home/user/workspace/node-echo/ # 工程目錄 - bin/ # 存放命令行相關代碼 node-echo + doc/ # 存放文檔 - lib/ # 存放API相關代碼 echo.js - node_modules/ # 存放三方包 + argv/ + tests/ # 存放測試用例 package.json # 元數據文件 README.md # 說明文件
下載三方包
以argv為例
$ npm install argv
...
argv@0.0.2 node_modules\argv
指定版本
$ npm install [email protected] ... argv@0.0.1 node_modules\argv
可以在package.json中如下改寫:
{ "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必需的欄位。接著上邊node-echo
的例子,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位。