Meteor: 如何复用node.js包或代码

时间:2021-12-16 16:24:18

Meteor基于Node.js,但是却有自己的包管理系统(atmosphere)以及代码加载机制,且meteor是非异步的,这些都意味着,node.js包(npm package)和代码通常不能直接用于meteor程序。

这里分享三种方法以在meteor中复用node.js包和代码。

meteorhacks:npm + meteorhacks:async

npm+async是复用npm包最便捷的方式。meteor程序添加npm包之后,便可以在packages.json中声明包依赖,在程序中通过Meteor.npmRequire来加载包。

值得一提的是,由于大部分npm包都是异步调用的,而meteor是同步运行的,所以需要某种方法将异步调用转为同步调用。async就是这样一个meteor包,添加之后,通过Async.runSync方法便可以同步地调用异步方法。

具体安装、使用方法以及更多介绍,请参考文档

适配node.js代码

如果需要复用的代码仅仅是个别文件、函数、片段等,可以手工修改代码以适配meteor程序。

需要注意到,node.js的每一个文件都是一个模块,通过module.exports和require进行组织,但是在meteor中,每一个文件都是会被自动加载的(具体顺序参考meteor文档),通过全局变量进行跨文件调用;meteor中不能直接加载npm包;meteor框架是同步运行的(非异步)。

综上,适配代码的工作包括:

  1. 使用meteorhacks:npm来加载npm包
  2. 修改跨文件调用方式,将原来的module.exports=xxx改为暴露全局变量,而调用方,将require(xxx)改为直接引用全局变量
  3. 直接被meteor框架调用的方法,使用meteorhacks:async包,将其从异步调用改为同步调用形式

创建meteor包

这种方法更复杂,但是也更进阶,不仅可以封装npm包,也能封装任意node.js代码(当然需要修改、适配),更能创建新的meteor包。

创建meteor包的具体方法不再赘述,参考如下:

学会创建meteor包之后,只需要按照上述方法适配代码,并封装成meteor包,便可以方便地使用和分享了。

参考项目

meteor-submail

该项目规模很小,便于分析。原始代码在submail-sdk文件夹中,其余代码为对原始代码的适配和封装。