Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Meteor环境中运行其他节点进程?_Meteor - Fatal编程技术网

在Meteor环境中运行其他节点进程?

在Meteor环境中运行其他节点进程?,meteor,Meteor,我一直在玩Meteor(和Meteorite)有一段时间了,我喜欢我轻松地启动和运行东西。现在我想在应用程序中添加一些测试,发现主要的障碍是在测试脚本中包含Meteor使用的包的引用/要求 例如,我编写了一个简单的类,它在内部使用了一些下划线方法。然后我写了一个简单的摩卡脚本来测试它 当我跑的时候 mocha my_test.js 它抱怨u是未定义的。如果我加上 var _ = require('underscore')._ 对于我的测试代码来说,它找不到下划线库,因为包都被打包在一个紧密的

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

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

当我跑的时候

mocha my_test.js
它抱怨u是未定义的。如果我加上

var _ = require('underscore')._
对于我的测试代码来说,它找不到下划线库,因为包都被打包在一个紧密的小包中,而这个包不在mocha的NODE_路径上。我可以指定那个路径,但那个种硬编码的路径似乎是个坏主意

有没有办法在Meteor环境中运行节点进程/脚本(如mocha)?我正在寻找类似于ruby land的“bundle exec”的东西。我已经研究过陨石,它似乎几乎把指令直接传给了流星,所以我希望你们可能想用这个

更新:

写完这篇文章后,我开始研究meteor的源代码。我写了一些我想要的东西,我想流星团队可能会评论这是否是一条好的道路。从meteor shell脚本(/usr/local/meteor/bin/meteor)开始,我在底部添加了一个case语句,它根据命令名切换模式。这个文件可以替换当前的meteor启动脚本,然后添加一个从meteor exec到meteor和voila的链接。有了这个替换脚本,我可以以正常的方式运行meteor。我也会跑步

meteor-exec `which mocha` tests/mocha_test.coffee --compilers coffee:coffee-script
我得到了我期望的结果。我可以要求从Meteor的第三方库中提取('下划线')。我可以将“摩卡”和“柴”放在我的npm全球包装空间中

如果这看起来是正确的思维方式,并且代码与你们可能进行的方式一致,我可以提交一个适当的拉请求

替换的流星外壳脚本就在这里。我在下面添加了差异

提前谢谢

罗杰斯先生

注:继续做好工作。我真的很喜欢流星

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" "$@"
diff meteor meteor.orig
105116C105106
export NODE_PATH=“$DEV_BUNDLE/lib/NODE_modules”
>exec“$DEV_BUNDLE/bin/node”“$METEOR”“$@”

您是对的,这允许您访问下划线和节点模块,但正如您所说,您将无法通过这种方式访问meteor软件包(即您将无法使用meteor.Collection)。还值得指出的是,我们Git存储库中的admin/node.sh与您的
meteor exec
做了相同的事情


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

谢谢。我想我没有使用node.sh脚本。我将进一步挖掘(在服务器代码等方面),看看我能找出什么。谢谢你的指点。