0

我想知道 Node.js/npm 是否包含任何与 Python setuptools 的“入口点”相当的扩展机制。

所以,简而言之:

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

1 回答 1

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

于 2013-05-11T14:29:27.250 回答