meteor.js 和 npm 需要 fs

Posted

技术标签:

【中文标题】meteor.js 和 npm 需要 fs【英文标题】:meteor.js and npm require fs 【发布时间】:2013-07-09 23:00:11 【问题描述】:

我很困惑,我需要为meteor.js fw使用fs包。

从流星版本 0.6> 我需要像这样使用 Npm.require:

var fs = Npm.require('fs');

但是当我这样做时会出现错误:npm is not defined

如何解决?我试过 mrt add npm 但是嗯...

顺便说一句:我有 /root/packages/npm

编辑 我的代码位于客户端/服务器端文件夹中,因此我将其移动到服务器块中

var fs;
if(Meteor.isServer) 
  fs = Meteor.require('fs');


fs.writeFile(path + name,...

GETTING ERROR: Cannot call a method writeFile of undefined

已解决 好吧,我通过将整个内容包装到 Meteor.isServer ... 解决了这个错误,但如果有人能好奇地向我解释为什么它不像上面那样工作?

【问题讨论】:

你能运行 mrt --version 并检查你的流星版本吗? 对您的附加问题:您尝试使用 Npm 服务器还是客户端? (你可以只在服务器端使用它) 在发布问题之前,我已经运行了 mrt --version。我猜是0.6.4。在收藏夹中,我不确定它是哪一边? Meteor.isServer 块之外的代码也在客户端上执行,并且由于没有在那里定义“fs”,它会引发错误。 【参考方案1】:

不是为了减损,而是...您可能想要使用的另一个选项是 Meteor 文件结构本身。您可以绕过 NPM 并在 Meteor 中使用您的 Assets。在 Meteor 中,您可以通过 var data = Assets.getText("example.txt").toString().split("\n"); 之类的方式访问您私人文件夹中的内容,例如,如果您想将文档转换为单词数组。这只是一个例子。我不确定你需要做什么。 :)

【讨论】:

【参考方案2】:

您需要在您的应用中添加package.js 或通过Npm.depends 明确指定依赖关系的智能包,然后才能使用Npm.require。如果您使用的是内置的npm 包(例如fs),则不需要Npm.depends 或智能包,但您仍然需要确保在服务器端使用它而不是在客户端。

例如,查看我的 Meteor 包的 package.js 文件,它引入了 ShareJS: https://github.com/mizzao/meteor-sharejs/blob/master/sharejs-ace/package.js

另见这篇文章: http://shiggyenterprises.wordpress.com/2013/05/16/accessing-the-file-system-in-meteor/

【讨论】:

谢谢回复,我以前看过这个帖子,但我不知道如何处理它。顺便说一句:我的要求在 /collections 文件夹中。在 Meteor.methods( // 可能是服务器端?【参考方案3】:

由于“fs”是节点的一部分,您可以简单地执行以下操作: var fs = Meteor.require('fs');

【讨论】:

我以前试过,现在又报错:object object has no method require. 这很奇怪。我刚刚尝试了一个全新的项目并且它有效。我所做的是mrt add npm,然后是mrt 来运行服务器并安装所需的 npms,它就可以工作了。 你把代码放在哪里了?我在 /collections 文件夹中有它 我不经常使用 SO,而且我不确定如何查看通知,但您通常会将其放在仅服务器代码中。 fs 不能用于客户端。【参考方案4】:

它是Npm,而不是npm,在你的问题中你同时使用了这两个。 javascript 区分大小写,请确保使用正确的Npm 格式。

【讨论】:

我认为 OP 指的是这个:github.com/oortcloud/…

以上是关于meteor.js 和 npm 需要 fs的主要内容,如果未能解决你的问题,请参考以下文章

meteor.js 和空格键 - 在嵌套循环中传递变量

加快 Meteor.js 中的自动重新加载

CollectionFS、Meteor.js、Summernote(所见即所得)和文件上传

如何更新meteor.js中的Mongodb集合?

如何在 javascript (meteor.js) 中操作返回的 mongo 集合/游标?

Meteor.js 应用程序不支持 IE 9