我们如何或可以通过 npm 和 Meteor 使用节点模块?

Posted

技术标签:

【中文标题】我们如何或可以通过 npm 和 Meteor 使用节点模块?【英文标题】:How do we or can we use node modules via npm with Meteor? 【发布时间】:2012-04-27 07:14:56 【问题描述】:

或者这取决于包装API?

或者有推荐的规定方法吗?

【问题讨论】:

【参考方案1】:

Meteor 1.3 于 2016 年 3 月 28 日发布,为应用程序提供完整的 ES6 (ES2015) 模块支持和开箱即用的 NPM 支持。应用程序和包现在可以在客户端和服务器上直接轻松地加载 NPM 模块。

如果可以使用 1.3,请查看http://guide.meteor.com/using-packages.html#installing-npm。

例如,使用moment.js:

meteor npm install --save moment

然后在你的代码中:

import moment from 'moment';

// this is equivalent to the standard node require:
const moment = require('moment');

如果您需要使用旧版本的 Meteor,请阅读下面的其余答案。


Pre-Meteor 1.3

Since v0.6.0, Meteor integrates directly with NPM modules 在第三方包的帮助下。例如,要使用 ws 之类的模块,

    运行sudo npm install -g ws(或对于本地安装,请参阅this)

    在您的服务器 javascript 文件中,

    var Websocket = Npm.require('ws');
    var myws = new Websocket('url');
    

要使用核心节点模块,只需进行相应的Npm.require() 调用,例如var Readable = Npm.require('stream').Readable.


感谢 Arunoda 开发的 NPM package,您可以直接将 230,000 NPM modules 以上的任何一个与 Meteor 一起使用。

您还可以从智能包定义对 Npm 包的依赖关系 - 来自 npm 支持的the initial announcement:

您的智能包现在可以直接定义依赖关系,方法是在package.js 中添加对Npm.depends 的调用:

Npm.depends(
  "awssum": "0.12.2",
  "underscore.string": "2.3.1"
);

所有这些都适用于热代码重新加载,就像 Meteor 的其余部分一样。当您进行更改时,捆绑器将自动下载缺失的 npm 包并重新固定其依赖项。

要在服务器代码中使用 NPM 模块,请使用 Npm.require,就像您通常使用普通的 require 一样。值得注意的是,__meteor_bootstrap__.require 已被淘汰,其所有用途均已转换为 Npm.require

有a small example of using an NPM module in your application。

【讨论】:

知道 0.6 版何时发布用于 windows 吗? 您能澄清一下 Npm.require(...) 可以与 http 或 url 等 nodejs 核心模块一起使用吗?如果有的话,也许可以在答案中添加这些信息。 @MikeGraf:添加了使用核心模块的示例。 @rickyduck:Meteor for Windows 现在非常好用,过几天就会正式发布,如果不是今天的话。 @DanDascalescu 最后!【参考方案2】:

请注意,此答案适用于 0.6.0 之前的 Meteor 版本,该版本于 2013 年 4 月发布并添加了直接 npm 集成

像往常一样通过npm 安装模块,然后使用

var require = __meteor_bootstrap__.require,
    pd = require("pd"),
    after = require("after") // etc

加载任何你想要的模块

【讨论】:

@SteeveCannon 它进入 if 服务器语句,因为它将在客户端失败 使用 npm 安装模块时,请检查 npm 版本是否为 1.0 或更高版本并进行本地安装 (npm install module_name)。 以及如何在客户端需要一个模块?只是想让github.com/mashpie/i18n-node 工作 @Nico 使用 browserify 或将模块破解为单个 js 文件 它似乎在传递依赖项上崩溃 - 例如尝试使用 aws-lib。有什么想法吗?【参考方案3】:

我在 Meteorpedia 上写了一篇完整的文章:

http://www.meteorpedia.com/read/npm

本文介绍了如何在您的应用程序和/或包中使用 npm,以及包装常规回调和事件发送器回调以在 Meteor 和 Fibers 中正常工作的常见模式,并包括对 Arunoda 的异步实用程序和其他资源的引用。

【讨论】:

“应用程序中的 NPM”第 3 点。 var Github = Meteor.require('github');不应该是 Meteor.npmRequire ( ... ) 吗?【参考方案4】:

您可以使用Meteor Npm 包

meteor add meteorhacks:npm

然后使用 NPM 模块的信息在项目的根目录中创建一个 packages.json 文件。


    "redis": "0.8.2",
     "github": "0.1.8"

然后就像(服务器端)一样简单

var github = Meteor.npmRequire("github");
var redis = Meteor.npmRequire("redis");

所以你只需使用Meteor.npmRequire 而不是require

【讨论】:

这个包只是为了简单地使用 npm 模块。 @MurWade 这是最简单的方法。唯一的另一种方法是制作自己的包,这是矫枉过正的。我也不建议像 Dan 的回答那样使用npm install -g,因为该应用程序在捆绑/部署时将无法正常工作。这样在捆绑的时候也安装好了【参考方案5】:

我写了一篇关于如何从 Meteor 0.6.5 开始执行此操作的 Gist,How to add Node.js npms to your Meteor.js project

【讨论】:

【参考方案6】:

我正在使用such a script,它可以很好地安装所有Node.js 依赖项。它的行为类似于 Meteor 引擎分支中的官方支持(它在运行时安装依赖项),但它也支持从 Git 存储库和类似的好东西安装。

【讨论】:

Meteor 0.6.0 取代了对此类脚本的需求。见丹的回答。

以上是关于我们如何或可以通过 npm 和 Meteor 使用节点模块?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 NPM 和 Meteor 获取 css 文件?

在 Meteor 1.0 中加载 NPM 包?

meteor.js 和 npm 需要 fs

在 Meteor 1.3 中导入通过 npm 安装的外部 Javascript 库

我如何在Meteor中使用pushjs?

2013 Meteor NPM 包