2015-02-09 55 views
1

我正在編寫一個將從命令行調用的實用程序(用Node.js編寫)。具體細節並不重要,但功能可以分解爲單獨的不相關模塊,每個模塊都可以獨立地爲最終結果做出貢獻。如何支持node.js命令行實用程序的插件?

例如,I可以調用:

npm install -g myutil #installs modulea and moduleb 
myutil     #invokes said modules 

假設存在模塊moduleamoduleb。目前,所有這些模塊捆綁爲myutil依賴,但在一個理想的世界,我想給他們打出並將它們分開安裝,以允許其他人寫的模塊

npm install -g myutil-contrib-modulec 

,然後檢測myutil-contrib-modulec在運行時和使用它一樣。然而,圍繞它有一些問題:

  1. 這是個好主意嗎?
  2. 有沒有一種支持的方式來做到這一點?常見問題表明,全球模塊應該是完全獨立的,但我想這是一個合理的用例。
  3. 如果根本不支持,有沒有其他的選擇?例如,我可以想到的一個替代方案是強制用戶在每個項目的本地安裝額外的模塊(但這不是一個很好的解決方案IMO)。

回答

0

其他答案沒有真正回答這個問題,所以對於未來的訪問者,我會發布我的實際解決方案。

我結束了nixing全球安裝插件的想法。相反,我保留與該工具捆綁在一起的插件。爲了支持自定義插件,我允許用戶在本地安裝它們。

加載插件的代碼跟在類似的rules as node itself之後,所以如果你真的想以全局方式安裝一個插件,只需要把它放在目錄樹上。

+0

可否請您分享一個鏈接到您的工具的實施參考? – 2017-03-23 09:58:35

0

看看liftoff可以幫助解決全局/本地CLI問題。也許你使用它,但也許你只是閱讀它的想法。我認爲目前的策略是,如果你必須在全球安裝一些東西,那麼只需將它放在some-users-project/node_modules/myutil內部的一個小包裝即可。沒有理由在全局安裝插件,因爲它們不會直接在命令行上運行,所以這些插件只能在本地安裝。

我可以想到的是強制用戶在每個項目本地安裝額外的模塊(但是,這不是一個很好的解決方案國際海事組織)。

這裏我的意見是npm -g一般是一個可怕的想法。很遺憾,人們無法調整PATH環境變量或設置shell別名,但我可以理解爲什麼要在全局安裝myutil。想要全球安裝所有的插件可能是錯誤的。但是這取決於myutil究竟是什麼以及它與使用它的項目有多強烈的耦合。從我的角度來看,我希望本地的一切,包括節點本身。我希望我的項目獨立。我不想爲項目A更新myutil,並且將項目B中斷作爲副作用。

+0

我從我的問題中刪除了一些細節,因爲它們並不真正相關。 1.這是一個內部工具,對我們構建的網站進行一些基本的編輯檢查。 2.全球插件是爲了易於使用,否則沒有人會使用它。 – 2015-02-10 14:22:35