如同 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 使用 groupId
, artifactId
, version
三個 '座標' 指定唯一的程式庫版本. 這些通用的模組, 都是放在 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?
好吧! 既然這是一個不會被解決的問題, 只好想辦法自行解決:
- 連結它, 避開它:
- 移除專案 node_modules 目錄下的每個模組, 然後重新建立連結:
(在 DOS 下)進入 node_modules 目錄, 執行for /d %f in (*) do (npm uninstall %f | npm link %f)
- 每次專案新增依賴模組時, 針對新增模組執行一次
或執行一次上面的npm uninstall new_module | npm link new_module
for
迴圈指令, 全部更新.
- 移除專案 node_modules 目錄下的每個模組, 然後重新建立連結:
- 接受它, 放下它:
- 就...假裝看不見吧.
不論選用上面哪種方法, 都必須要處理下面的設定與改變:
- 在 .gitignore 檔案中, 指定不要保存 node_modules 目錄, 避開它.
- 備份的時候, 指定不要備份該目錄, 譬如 7-Zip:
7za a -r -xr!node_modules my_project c:\my_project\*.*
- Dropbox 同步: 嗯...不要用了.
前面第一種方法, 是我自己實驗出來的, 先試用一陣子看看, 不行的話, 再採用第二種方法.
歡迎大家的回饋與心得分享.
相關文章:
- 整合 Maven 與 Yeoman, 學習筆記(2) - mvn archetype:generate
- Differential backup using 7-Zip for Windows (Part 1) - 利用 7-Zip 進行差異備份(上篇)
- Differential backup using 7-Zip for Windows (Part 2) - Secrets of batch files - 利用 7-Zip 進行差異備份(下篇) - 批次檔案的秘密
參考文章:
- npm 1.0: Global vs Local installation
- npm fag - Why can't npm just put everything in one place, like other package managers?
- npm folders
- npm - link
- Installing project's dependencies globally and running the project without 'node_modules/' — how?
- npm local install package to custom location
- How to replace NPM node_module folder with another folder?
- Git .gitignore 設定 與 注意事項 - 以 Zim 操作為範例
沒有留言:
張貼留言