整合 Maven 與 Yeoman,學習筆記 (1) - node_modules

如同 Java 可以使用 Maven 來幫助專案開發自動化,管理程式庫的依賴關係及下載等瑣碎的維護問題,使用 Yeoman(Yo/Bower/Grunt) 可以輔助 Web Front-End 自動化開發,減少人工勞動容易發生的失誤。

這一系列筆記,將記錄整合及學習 Maven / Yeoman 的過程中所遇到的各種問題,疑惑,注意事項及各種使用到的附加元件。目標是整合 Maven 及 Yeoman,建構從 Back-End 到 Front-End 一致的自動化專案建構架構。

這一篇記錄的,是關於 node 模組依賴關係的問題。

當使用 yo webapp 指令來生成專案時,會立即下載一堆依賴模組,這些依賴模組的檔案,都會放在專案根目錄下的 node_modules 目錄下,我目前使用的 yo 1.0.6 版會產生總共 41.7 MB 大小的檔案。仔細去看的話,這些檔案在每個生成的專案都是完全相同的。這實在是個浪費,尤其是當要 git 或備份專案檔案,或者使用 dropbox 同步的時候,都必須要設法避開這些檔案。

使用過 Maven 管理專案的人,應該都知道 Maven 使用 groupIdartifactIdversion 三個 『座標』 指定唯一的程式庫版本。這些通用的模組,都是放在 local repository 供所有的專案共用的,絕對不會有重複的情形。

不幸的是,這似乎是 node 社群不打算解決的問題,使用 install node_modules global 作為關鍵字搜尋,可以找到很多疑問。但是,在 Why can't npm just put everything in one place,like other package managers? 這裡,明白說了:

because it's a terrible idea that causes more problems than it solves.

還有

npm will not help you do something that is known to be a bad idea.

老實說,我不太能同意這樣的說法和態度,同樣的東西 Maven 可以做的到,做得很好,為何對 node 就是 terrible idea

好吧! 既然這是一個不會被解決的問題,只好想辦法自行解決:

1.連結它,避開它:

  • 移除專案 node_modules 目錄下的每個模組,然後重新建立連結:

(在 DOS 下) 進入 node_modules 目錄,執行

1
for /d %f in (*) do (npm uninstall %f | npm link %f)
  • 每次專案新增依賴模組時,針對新增模組執行一次
1
npm uninstall new_module | npm link new_module

或執行一次上面的 for 迴圈指令,全部更新。

2.接受它,放下它:

  • 就...假裝看不見吧。

不論選用上面哪種方法,都必須要處理下面的設定與改變:

  • .gitignore 檔案中,指定不要保存 node_modules 目錄,避開它。
  • 備份的時候,指定不要備份該目錄,譬如 7-Zip:
1
7za a -r -xr!node_modules my_project c:\my_project*.*
  • Dropbox 同步: 嗯...無解。...就不要用了吧。

前面第一種方法,是我自己實驗出來的,先試用一陣子看看,不行的話,再採用第二種方法。

歡迎大家的回饋與心得分享。

參考文章:

相關文章: