完整的 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();
相关推荐
迷曳23 分钟前
28、鸿蒙Harmony Next开发:不依赖UI组件的全局气泡提示 (openPopup)和不依赖UI组件的全局菜单 (openMenu)、Toast
前端·ui·harmonyos·鸿蒙
爱分享的程序员35 分钟前
前端面试专栏-工程化:29.微前端架构设计与实践
前端·javascript·面试
上单带刀不带妹39 分钟前
Vue3递归组件详解:构建动态树形结构的终极方案
前端·javascript·vue.js·前端框架
-半.40 分钟前
Collection接口的详细介绍以及底层原理——包括数据结构红黑树、二叉树等,从0到彻底掌握Collection只需这篇文章
前端·html
90后的晨仔1 小时前
📦 Vue CLI 项目结构超详细注释版解析
前端·vue.js
@大迁世界1 小时前
用CSS轻松调整图片大小,避免拉伸和变形
前端·css
一颗不甘坠落的流星1 小时前
【JS】获取元素宽高(例如div)
前端·javascript·react.js
白开水都有人用1 小时前
VUE目录结构详解
前端·javascript·vue.js
if时光重来1 小时前
axios统一封装规范管理
前端·vue.js
m0dw1 小时前
js迭代器
开发语言·前端·javascript