我正在试验 Meteor,并爱上了它。我的问题是:
我可以在我的 Meteor 上安装任何 nodeJS 包,例如 NodeMailer 并让它开箱即用吗?如果没有,通常的步骤是什么让它运行?
简短的回答是否定的,Meteor 依赖于Fibers,这破坏了与许多包的原生兼容性。目前,获取一个不使用 Fibers 在 Meteor 中工作的包是逐案完成的。这是一个最近的例子
您可以按照这些说明来确保您的包与您的流星应用程序一起部署。
以下是Meteor 的核心开发人员之一 David Greenspan使用 Fibers 构建 Meteor 的理由,强调我的:
实际上,[在使用或不使用 Fibers 之间] 没有固有或明显的性能权衡,因此我们选择公开更简单的 API(或两者兼而有之)。
Node 模型基本上是您的应用程序获得一个线程,即事件循环。如果您希望您的应用程序快速,请求处理程序最好尽快离开线程!它在 vanilla Node 中执行此操作的方式是完成并返回,如果有更多工作要做,则在某处传递回调之后。 使用纤程,请求处理程序在执行 I/O 时可以改为“屈服”,因此它会脱离线程,但对程序员来说是不可见的。 就好像同步调用内部发生了回调,但回调只是程序的延续。这是 streamline 试图模拟的,但它发生在 V8 级别。
重要的一点是 Meteor 的“同步”调用不会阻塞,它们会屈服于事件循环。虽然通常事件循环会在需要调用的任何回调之间反弹,但它会在需要进一步执行的任何函数之间反弹。