2012年5月24日

Node.js NPM 相依模組問題處理,以 connect-mongodb for Windows 為例

Node.js 使用 NPM 工具管理模組依賴關係(modules dependencies),開發者可以在專案資料夾定義 "package.json" 設定檔,如此一來就能方便建置(build)的自動化。對某些雲端 PaaS 服務來說,這也是必要的設定(例如 Heroku)。

不過當模組愈來愈複雜,dependencies 會是個製造問題的麻煩,例如在 Node.js for Windows 環境下,安裝 connect-mongodb@1.1.3 會發生錯誤。

"dependencies": {
  "connect-mongodb": "latest"
}

錯誤訊息如下:


從訊息中可以發現 mongodb@0.9.7(在 connect-mongodb 的 package.json 指定的版本)這個版本無法在 Windows 環境下安裝。但如果使用 npm install mongodb 或是在 package.json 增加 mongodb 的相依(目前最新版本是 1.0.2),會發現最新版本的 mongodb 模組已經相容 Windows。

"dependencies": {
  "mongodb": "1.0.2",
  "connect-mongodb": "latest"
}

但即使增加了最新版的 mongodb 相依設定到 package.json,NPM 仍會強制幫 connect-mongodb 安裝其指定的 mongodb@0.9.7。

我參考 npm-shrinkwrap 想要設定 sub-dependencies,但最後並沒有成功。

另外一個嘗試結果可以解決問題,就是在 GitHub 上面 fork 一份原始專案,我想這也是一個可行的方案:
  1. 許多 Node.js modules 都有 GitHub Repository
  2. NPM 支援從 GIT / HTTP URL 取得 modules(很方便的 feature)

因此我將 masylum/connect-mongodb fork to lyhcode/connect-mongodb,再修改 package.json 的 mongodb 相依版本為 1.0.2。同時也將這個修改 Pull Request 到原始專案。

我不知道原作者什麼時候才會 accept 這個 request,不過在這段期間,可以直接將 GIT URL 作為 package.json 的 dependencies 設定值,如此一來就能自己快速解決某項模組的小問題。

"dependencies": {
  "connect-mongodb": "git://github.com/lyhcode/connect-mongodb.git"
}

沒有留言:

張貼留言

lyhcode by lyhcode
歡迎轉載,請務必註明出處!