我的項目需要調(diào)試某個框架的 plug-in,舉例來說, graph-compose-connection 是 graph-compose 框架的一個 plug-in,因此我在我的項目中(例如: my-project)對 graph-compose-connection 使用了 npm link,這樣我就可以通過隨時修改 graph-compose-connection 的代碼來調(diào)試。
graph-compose-connection 項目中 peerDependencies 了其宿主 graph-compose,這是很常見的做法,可以讓 plug-in 和宿主的依賴不那么嚴苛。但是這樣問題就來了,當執(zhí)行 my-project 下的代碼時,總是會報出找不到 graph-compose 的異常,盡管在 my-project 中已經(jīng)依賴并安裝了 graph-compose。
這個問題的原因在于,Node.JS 模塊系統(tǒng)在搜尋依賴模塊時,是從當前模塊的 node_modules 開始搜索,沒找到就去查找父目錄的 node_modules,一路向上。但是對于 npm link 的 graph-compose-connection,因為是符號鏈接過去的,其父目錄并非是 my-project,于是就找不到了。
這個問題很早就出現(xiàn)過,然后修復(fù)了。但是在 Node.JS v6 又出現(xiàn)了(由于 require 算法的改變),后來經(jīng)過討論,通過增加一個命令行參數(shù)來解決這個問題: --preserve-symlinks。因此你需要這樣執(zhí)行:
node --preserve-symlinks index.js
# or coffee
coffee --nodejs --preserve-symlinks index.coffee