【问题标题】:running other node processes in the Meteor environment?在 Meteor 环境中运行其他节点进程?
【发布时间】:2012-12-31 01:31:00
【问题描述】:

我已经玩了一段时间的 Meteor(和 Meteorite)了,我很喜欢我可以轻松地启动和运行。现在我想向应用程序添加一些测试,发现主要障碍是在测试脚本中包含对 Meteor 使用的包的引用/要求。

例如,我编写了一个简单的类,它在内部使用了一些下划线方法。然后我写了一个简单的 mocha 脚本来测试一下。

当我跑步时

mocha my_test.js

它抱怨 _ 未定义。如果我添加

var _ = require('underscore')._

对于我的测试代码,它找不到下划线库,因为这些包都包裹在一个紧密的小包中,not 在 mocha 的 NODE_PATH 上。我可以指定该路径,但那种硬编码路径似乎是个坏主意。

有没有办法在 Meteor 环境中运行节点进程/脚本(如 mocha)?我正在寻找类似于 ruby​​-land 的“bundle exec”的东西。我研究过 Meteorite,它似乎几乎可以将命令直接传递给 Meteor,所以我希望你们可能想要使用这个。

更新:

写完这篇,我开始看流星源代码。我能够写出一些大部分我想要的东西,并且认为 Meteor 团队可能会评论这是否是一条好的下坡路。从流星外壳脚本(/usr/local/meteor/bin/meteor)开始,我在底部添加了一个 case 语句,它根据命令名称切换模式。该文件可以替换当前的流星启动脚本,然后添加从流星执行到流星的链接,瞧。使用这个替换脚本,我可以正常运行流星。我也可以跑

meteor-exec `which mocha` tests/mocha_test.coffee --compilers coffee:coffee-script

我得到了我期望的结果。我可以 require('underscore') ,它是从 Meteor 的第三方库中提取的。我可以在我的 npm 全局包空间中包含“mocha”和“chai”。

如果这看起来是正确的心态,并且代码与你们可能继续的方式一致,我可以提交适当的拉取请求。

替换的流星外壳脚本在此要点https://gist.github.com/4416913 中。我在下面添加了差异。

谢谢,提前

罗杰斯先生

ps。保持良好的工作。我真的很喜欢 Meteor。

diff meteor meteor.orig 
105,116c105,106
< NPM_GLOBAL_PATH=$(npm root -g)
< METEOR_THIRD_PARTY="$DEV_BUNDLE/app/lib/third"
< case $(basename $0) in
<   meteor)
<     export NODE_PATH="$DEV_BUNDLE/lib/node_modules"
<     exec "$DEV_BUNDLE/bin/node" "$METEOR" "$@"
<     ;;
<   meteor-exec)
<     export NODE_PATH="$DEV_BUNDLE/lib/node_modules:$METEOR_THIRD_PARTY:$DEV_BUNDLE/packages:$NPM_GLOBAL_PATH"
<     exec "$DEV_BUNDLE/bin/node" "$@"
<     ;;
< esac
---
> export NODE_PATH="$DEV_BUNDLE/lib/node_modules"
> exec "$DEV_BUNDLE/bin/node" "$METEOR" "$@"

【问题讨论】:

    标签: meteor


    【解决方案1】:

    您是对的,这使您可以访问下划线和节点模块,但正如您所说,您将无法以这种方式访问​​流星包(即您将无法使用 Meteor.Collection)。还值得指出的是,我们 Git 存储库中的 admin/node.sh 与您的 meteor-exec 做同样的事情。

    如果您想尝试构建更完整的解决方案,请查看 app/server/server.js 以了解我们如何加载包。您需要执行类似的操作才能测试依赖 Meteor 本身的代码。另一种方法是创建一个智能包包装 mocha。目前还没有简单的方法可以直接从 Meteor 包中依赖 NPM 模块(这正在开发中),但是您可以将 mocha 源代码复制到您的包中。然后你就可以在你的应用程序中运行meteor 来运行你的 mocha 测试(尽管仍然在运行一个监听端口 3000 的 Web 服务器等)

    【讨论】:

    • 谢谢。我想我没有注意到 node.sh 脚本。我会再挖掘一点(在服务器代码等处),看看我能弄清楚什么。谢谢指点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 2016-07-17
    • 2022-08-19
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    相关资源
    最近更新 更多