完整的 Meteor NPM 集成

在Meteor中,你只能使用包内的模块。你不能直接将模块与流星应用一起使用。此软件包解决了该问题

文章目录

源码下载地址

点击这里下载源码

安装

python 复制代码
meteor add meteorhacks:npm

然后启动您的应用并按照说明进行操作。

定义软件包

初始化 npm 支持后,你的应用内将有一个称为文件名的文件名。在该文件中定义包,如下所示。

python 复制代码
{
  "redis": "0.8.2",
  "github": "0.1.8"
}

您必须为 npm 模块定义一个绝对版本号

如果需要从特定提交安装 npm 模块,请使用以下语法:

python 复制代码
{
  "googleapis": "https://github.com/bradvogel/google-api-nodejs-client/archive/d945dabf416d58177b0c14da64e0d6038f0cc47b.tar.gz"
}

以上内容可以使用 github 版本生成。你要用的是版本,而不是.<commit hash>.tar.gzarchive/<version number>.tar.gz

使用软件包

你可以使用 method 访问服务器端的 npm 模块,并随心所欲地使用它。 大多数 npm 模块都提供带有回调或承诺的异步 API。所以,你不能直接在Meteor上使用它们。正因为如此,这个软件包附带了一组方便的异步实用程序,让你的生活更轻松。

在 Meteor 方法中使用 npm 模块的示例

python 复制代码
if (Meteor.isClient) {
  getGists = function getGists(user, callback) {
    Meteor.call('getGists', user, callback);
  }
}

if (Meteor.isServer) {
  Meteor.methods({
    'getGists': function getGists(user) {
      var GithubApi = Meteor.npmRequire('github');
      var github = new GithubApi({
          version: "3.0.0"
      });

      var gists = Async.runSync(function(done) {
        github.gists.getFromUser({user: 'arunoda'}, function(err, data) {
          done(null, data);
        });
      });

      return gists.result;
    }
  });
}

应用程序接口

仅在服务器端可用

Meteor.npmRequire(npmModule名称)

此方法加载您在文件中指定的 NPM 模块。

python 复制代码
var Github = Meteor.npmRequire('github');

Meteor.require(npmModule名称)

同上。但已弃用。

异步实用程序

仅在服务器端可用 Async Utitlies 可以通过
meteorhacks:async 作为单独的软件包提供

Meteor API 是同步执行的。大多数 NodeJS 模块都是异步工作的。 因此,我们需要一种方法来弥补差距。Async Utilities 来拯救你。

Async.runSync(函数)

Async.runSync()暂停执行,直到调用 callback,如下所示。done()

python 复制代码
var response = Async.runSync(function(done) {
  setTimeout(function() { 
    done(null, 1001);
  }, 100);
});

console.log(response.result); // 1001

done()callback 需要 2 个参数。 和对象。您可以将它们作为 的返回值获取,如上例中的响应所示。errorresultAsync.runSync()

返回值是一个对象,它有 2 个字段。 和。error result

Meteor.sync(函数)

相同,但已弃用。Async.runSync

Async.wrap(函数)

包装一个异步函数,并允许它在 Meteor 中运行,没有回调。

python 复制代码
//declare a simple async function
function delayedMessage(delay, message, callback) {
  setTimeout(function() {
    callback(null, message);
  }, delay);
}

//wrapping
var wrappedDelayedMessage = Async.wrap(delayedMessge);

//usage
Meteor.methods({
  'delayedEcho': function(message) {
    var response = wrappedDelayedMessage(500, message);
    return response;
  }
});

如果回调有结果,它将从包装的函数返回。如果出现错误,则会抛出。

Async.wrap(function)与 非常相似。
Meteor._wrapAsync

Async.wrap(对象,函数名称)

与 非常相似,, 但此 API 可用于包装对象的实例方法。Async.wrap(function)

python 复制代码
var github = new GithubApi({
    version: "3.0.0"
});

//wrapping github.user.getFrom
var wrappedGetFrom = Async.wrap(github.user, 'getFrom');

Async.wrap(对象,函数名称列表)

与 非常相似,, 但此 API 可用于包装对象的多个实例方法。Async.wrap(object, functionName)

python 复制代码
var github = new GithubApi({
    version: "3.0.0"
});

//wrapping github.user.getFrom and github.user.getEmails
var wrappedGithubUser = Async.wrap(github.user, ['getFrom', 'getEmails']);

//usage
var profile = wrappedGithubUser.getFrom('arunoda');
var emails = wrappedGithubUser.getEmails();
相关推荐
장숙혜5 分钟前
ElementUi的Dropdown下拉菜单的详细介绍及使用
前端·javascript·vue.js
火柴盒zhang7 分钟前
websheet之 编辑器
开发语言·前端·javascript·编辑器·spreadsheet·websheet
某公司摸鱼前端10 分钟前
uniapp 仿企微左边公司切换页
前端·uni-app·企业微信
WKK_13 分钟前
uniapp自定义封装tabbar
前端·javascript·小程序·uni-app
莫问alicia14 分钟前
react 常用钩子 hooks 总结
前端·javascript·react.js
Mintopia23 分钟前
图形学中的数学基础与 JavaScript 实践
前端·javascript·计算机图形学
Mintopia29 分钟前
Three.js 制作飘摇的草:从基础到进阶的全流程教学
前端·javascript·three.js
BillKu30 分钟前
Vue3父子组件数据双向同步实现方法
前端·javascript·vue.js
红尘散仙1 小时前
七、WebGPU 基础入门——Texture 纹理
前端·rust·gpu
jaywongX1 小时前
Base64编码原理:二进制数据与文本的转换技术
前端·javascript·vue