2013-05-11 11 views
0

我想知道Node.js/npm是否包含任何類似於Python setuptools'"entry points"的擴展機制。Node.js/npm - 包中的動態服務發現

因此,簡而言之:

  • 有什麼辦法,我可以做到用NPM其他包提供的服務的動態發現?
  • 如果不是,那麼實現類似的最好方法是什麼?在主模塊的配置文件中指定擴展名似乎是合乎邏輯的解決方案,但我想知道是否可以完成「自動」操作。

回答

1

我不知道任何內置機制來做到這一點。做自己的

一個可行的辦法:
我做了一個小工具(Jumpstart的)來快速創建從佔位符模板腳手架工程,我用了一種針對插件機制。基本上,Jumpstart腳本搜索名爲jumpstart-*的模塊與模塊本身的安裝位置「相鄰」。所以它適用於本地和全球安裝。如果在本地安裝,它會搜索其他本地模塊(在同一級別),如果是全局的,它將搜索其他全局模塊。

請注意,在這裏,「搜索」歸結爲一個簡單的fs.exists檢查,以查看是否安裝了具有特定名稱的Jumpstart模板模塊。但是,沒有任何東西可以阻止實際獲得匹配jumpstart-*模式的所有已安裝軟件包的完整列表,並且一次加載所有軟件包。我也可以搜索整個目錄樹中的node_modules目錄,並執行相同的操作。然而,這樣做對於這個特定的程序毫無意義。

請參閱https://npmjs.org/package/jumpstart瞭解文檔。

此技術的唯一限制是所有模塊必須以一致的方式命名。從一些字符串開始,以一些字符串結束,就像那樣。任何對命名空間造成污染的流氓軟件包都可以通過對軟件包內容進行進一步檢查來檢測:它包含哪些文件?它的主模塊導出什麼樣的對象?等等。

早午餐也使用插件機制。這實際上處理文件擴展名,所以更相關:https://github.com/brunch/brunch/wiki/Plugins。參見例如CoffeeScript插件的源碼https://github.com/brunch/coffee-script-brunch/blob/master/src/index.coffee