Node.js / npm - 包中的动态服务发现

时间:2013-05-11 10:30:37

标签: node.js npm

我想知道Node.js / npm是否包含与Python setuptools'"entry points"相当的任何一种表现机制。

简而言之:

  • 有什么办法可以动态发现其他软件包使用npm提供的服务吗?
  • 如果没有,那么实现类似的最佳方法是什么?在主模块的配置文件中指定扩展名似乎是合乎逻辑的解决方案,但我想知道是否可以“自动”完成。

1 个答案:

答案 0 :(得分: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的源代码。