我们如何或可以通过 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 使用节点模块?的主要内容,如果未能解决你的问题,请参考以下文章