2016-01-17 26 views
0

我有一個系統,主模塊需要的「插件」模塊需要一個模塊,但它需要相對於主目錄模塊。具體來說,我有一個包pavios,它需要一個名爲pavios-eslint的模塊。 pavios-eslint需要要求pavios模塊的node_modules目錄中存在的babel-eslint模塊,但它需要node_modules模塊的node_modules目錄中的所有內容。 process.chdir()對它沒有任何影響(即intended behavior),我不知道除非採取解決方法或黑客行爲才能做到這一點。任何幫助表示讚賞。更改需要()在目錄中使用節點

編輯:我無法控制需要babel-eslint的代碼,所以我不能改變代碼的要求。

+0

您也可以在'pavios-eslint'模塊中安裝'babel-eslint'。 – gnerkus

+0

如果你知道其他模塊在哪裏,那麼只需建立你自己的路徑到另一個位置,並將它提供給'require()'。如果您不知道其他模塊的位置,那麼您需要獲取它的位置,以便可以建立它的路徑,或者您需要全局安裝該模塊,以便可以在任何地方找到它。 – jfriend00

+0

@ jfriend00我很樂意這樣做,但我做不到。看到我的編輯,並感謝您的幫助。 – rioc0719

回答

0

我認爲你只是在做錯事,這就是爲什麼你會遇到這些麻煩。你的插件應該列出它作爲依賴關係的任何模塊,它會執行require()。然後,在安裝模塊時,NPM將負責在當前配置中爲您安裝,共享和/或查找這些模塊。這就是依賴關係的工作原理,這就是你如何避免你現在遇到的問題。爲每個模塊正確設置你的依賴關係,這些都應該爲你照顧。您已列爲依賴項的任何模塊都可以使用require("./modulename")從模塊加載。 require()NPM的組合將自動爲您完成。

請記住,多模塊依賴於相同的模塊是完全可以的。 NPM將爲您處理更新和位置,並儘可能共享通用模塊。

如果您有模塊依賴關係是循環的,並且正在初始化時加載,其中A對B有要求,B對A有要求,則您需要解決另一個問題。我不知道這是否涉及這裏。

如果這不是充分的幫助,那麼請花費更多的時間在代碼中解釋確切的require()樹,因爲上面所寫的內容並不能讓我完全理解你想要達到的目的以及爲什麼你不願意只是找到他們自然會被require()子系統找到的東西。在您控制的加載順序中確切使用哪些代碼或者您可以控制多少文件系統位置也不清楚。

這裏的另一種可能性是,不是讓模塊A加載模塊B然後嘗試從模塊A的位置加載模塊C,您可以讓模塊模塊A第一個加載模塊C,然後當它加載模塊B時,它可以通過C的模塊句柄到模塊B的構造函數。這是父模塊可以與孩子共享一個模塊的一種方式。