首頁  >  文章  >  web前端  >  詳解Node.js包的工程目錄與NPM套件管理器的使用_node.js

詳解Node.js包的工程目錄與NPM套件管理器的使用_node.js

WBOY
WBOY原創
2016-05-16 15:15:191574瀏覽

工程目錄

了解了以上知識後,現在我們可以來完整地規劃一個工程目錄了。以編寫一個命令列程式為例,一般我們會同時提供命令列模式和 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 伺服器下載別人寫的三方套件到本機使用。
  • 允許使用者從 NPM 伺服器下載並安裝別人編寫的命令列程式到本機使用。
  • 允許使用者將自己編寫的套件或命令列程式上傳到 NPM 伺服器供別人使用。

可以看到,NPM 建立了一個 NodeJS 生態圈,NodeJS 開發者和使用者可以在裡邊互通有無。以下分別介紹這三種場景下如何使用 NPM。

下載三方包
需要使用三方包時,首先得知道有哪些包可用。雖然 npmjs.org 提供了個搜尋框可以根據包名來搜索,但如果連想使用的三方包的名字都不確定的話,就請百度一下吧。知道了包名後,例如上邊範例中的 argv,就可以在工程目錄下開啟終端,使用以下指令來下載三方包。

$ npm install argv
...
argv@0.0.2 node_modules\argv

下載好之後,argv 套件就放在了工程目錄下的 node_modules 目錄中,因此在程式碼中只需要通過 require('argv')的方式就好,無需指定三方包路徑。

以上指令預設下載最新版三方包,如果想要下載指定版本的話,可以在包名後邊加上@,例如透過以下指令可下載 0.0.1 版的 argv。

$ npm install argv@0.0.1
...
argv@0.0.1 node_modules\argv

如果使用到的三方包比較多,在終端機下一個包一條命令地安裝未免太人肉了。因此 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 必需的欄位。接著上方 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位元。
版本號碼有了這個保證後,在申明三方包依賴時,除了可依賴一個固定版本號外,還可依賴某個範圍的版本號。例如"argv": "0.0.x"表示依賴 0.0.x 系列的最新版 argv。 NPM 支援的所有版本號範圍指定方式可以查看官方文件。

靈機一點
除了本章介紹的部分外,NPM 還提供了許多功能,package.json 裡也有很多它有用的欄位。除了可以在 npmjs.org/doc/ 查看官方文件外,這裡再介紹一些 NPM 常用指令。

NPM 提供了許多指令,例如 install 和 publish,使用 npm help 可查看所有指令。

  • 使用 npm help 可查看某條指令的詳細協助,例如 npm help install。
  • 在 package.json 所在目錄下使用npm install . -g可先在本機安裝目前命令列程序,可用於發布前的本機測試。
  • 使用npm update 可以把目前目錄下 node_modules 子目錄裡邊的對應模組更新至最新版本。
  • 使用npm update -g可以把全域安裝的對應命令列程式更新至最新版。
  • 使用npm cache clear可以清空 NPM 本機緩存,用於對付使用相同版本號發布新版本程式碼的人。
  • 使用npm unpublish @可以撤銷發佈自己發佈過的某個版本程式碼。
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn