【问题标题】:"Telescope" project (of METEOR) installed on Windows, but cannot start“望远镜”项目(METEOR)安装在 Windows 上,但无法启动
【发布时间】:2014-06-08 00:27:11
【问题描述】:

我在我的 Windows 8 环境中为 Meteor 0.8.1.3 安装了最新的“望远镜”项目(已经安装在 Windows 中)。请注意,最新的“望远镜”项目确实支持 Meteor 0.8。

我确实克隆了其软件包的所有相关 git 存储库。

当我运行应用程序(通过“meteor run”)时,一切似乎都构建好了,但是在“Started MongoDB”消息之后出现以下错误(并且每隔几秒钟重复一次):

=> Started proxy.

=> Started MongoDB.

W20140608-02:12:51.171(3)? (STDERR)

W20140608-02:12:51.172(3)? (STDERR)
C:\Users\nm2arch\AppData\Local\.meteor\tools\edf8981bb6\lib\node_modules\fibere.js:173

W20140608-02:12:51.173(3)? (STDERR)                                             throw(ex);

W20140608-02:12:51.175(3)? (STDERR)                                                   ^

W20140608-02:12:51.176(3)? (STDERR) ReferenceError: window is not defined

W20140608-02:12:51.181(3)? (STDERR)     at a.lang.months (packages/momentjs/moment\min\langs.min.js:1)

W20140608-02:12:51.182(3)? (STDERR)     at moment (packages/momentjs/moment\min\langs.min.js:1)

W20140608-02:12:51.183(3)? (STDERR)     at packages/momentjs.js:45:4

W20140608-02:12:51.184(3)? (STDERR)     at packages/momentjs.js:73:3

W20140608-02:12:51.184(3)? (STDERR)     at C:\work\telescope\.meteor\local\build\programs\server\boot.js:185

W20140608-02:12:51.185(3)? (STDERR)     at Array.forEach (native)

W20140608-02:12:51.186(3)? (STDERR)     at Function._.each._.forEach(C:\Users\nm2arch\AppData\Local\.meteor\tool81bb6\lib\node_modules\underscore\underscore.js:79:11)

W20140608-02:12:51.187(3)? (STDERR)     at C:\work\telescope\.meteor\local\build\programs\server\boot.js:102

=> Exited with code: 8

=> Started proxy.

=> Started MongoDB.

W20140608-02:12:51.171(3)? (STDERR)

W20140608-02:12:51.172(3)? (STDERR)
C:\Users\nm2arch\AppData\Local\.meteor\tools\edf8981bb6\lib\node_modules\fibere.js:173

W20140608-02:12:51.173(3)? (STDERR)                                             throw(ex);

W20140608-02:12:51.175(3)? (STDERR)                                                   ^

W20140608-02:12:51.176(3)? (STDERR) ReferenceError: window is not defined

W20140608-02:12:51.181(3)? (STDERR)     at a.lang.months (packages/momentjs/moment\min\langs.min.js:1)

W20140608-02:12:51.182(3)? (STDERR)     at moment (packages/momentjs/moment\min\langs.min.js:1)

W20140608-02:12:51.183(3)? (STDERR)     at packages/momentjs.js:45:4

W20140608-02:12:51.184(3)? (STDERR)     at packages/momentjs.js:73:3

W20140608-02:12:51.184(3)? (STDERR)     at C:\work\telescope\.meteor\local\build\programs\server\boot.js:185

W20140608-02:12:51.185(3)? (STDERR)     at Array.forEach (native)

W20140608-02:12:51.186(3)? (STDERR)     at Function._.each._.forEach(C:\Users\nm2arch\AppData\Local\.meteor\tool81bb6\lib\node_modules\underscore\underscore.js:79:11)

W20140608-02:12:51.187(3)? (STDERR)     at C:\work\telescope\.meteor\local\build\programs\server\boot.js:102

=> Exited with code: 8

(...而且上面的模式重复了好几次...)

当然,“localhost:3000”没有任何反应,因为应用程序运行不正常。

我不知道还需要做什么才能让某人在 Windows 环境中使用 Meteor 运行 Telescope 项目(截至 2014 年 6 月)。

我相信其他用户在使用 Meteor 项目和 Windows 时会遇到类似的问题(不一定完全相同),因此最好在这里找到解决方案(至少对于这些特定问题)。

谢谢!

【问题讨论】:

  • 我推荐使用 Vagrant 在 Windows 上运行流星。见gist.github.com/gabrielhpugliese/5855677
  • 谢谢你,alanfie,如果我使用 Vagrant 选项,我可以在 Windows 的 WebStorm 中开发我的 Meteor 应用程序而没有更多麻烦吗?我觉得我必须小心很多事情(版本控制等?)。

标签: windows node.js mongodb meteor


【解决方案1】:

错误似乎非常明确地表明在“moment”包中找不到“window”变量。

此包用于显示和操作时间,通常用于浏览器端,通常/始终存在“窗口”。您的日志显示这正在服务器端使用。

我的猜测是你没有完全正确地克隆包,因此你有一个尚未适应流星的时刻版本。

我怀疑如果您获取相同的文件并在 Linux 或 Mac 上运行它们,您会得到完全相同的错误。

如果您详细说明您克隆了哪些存储库,我可能会发现问题。

更新:作为参考,这是我为使 Telescope 工作所做的工作。

首先,我将 Telescope 下载到了一个子目录中: git clone https://github.com/TelescopeJS/Telescope.git cd Telescope

接下来,我使用了一个简单的 Powershell 脚本来自动化 Meteorite 的本质功能。 如果只有几个依赖项,您可以手动执行此操作,但 Telescope 有一些:

powershell
$root = Get-Location
$json = Get-Content smart.lock | Out-String | ConvertFrom-Json
$names = $json.dependencies.packages | Get-Member -Type NoteProperty | Select -expand Name
foreach ($name in $names)
{
    echo ('-' * 78)
    echo "Installing package: $name"
    $p = $json.dependencies.packages.$name
    cd "$root\packages"
    [Environment]::CurrentDirectory = Get-Location
    echo "=> git clone --recursive $($p.git) $name"
    git clone --recursive $($p.git) $name

    cd "$root\packages\$name"
    [Environment]::CurrentDirectory = Get-Location
    echo "=> git checkout $($p.commit)"
    git checkout $($p.commit)
}

然后我们需要将包添加到 Meteor(仍然是 PowerShell 语法):

cd $root
[Environment]::CurrentDirectory = Get-Location
echo "=> meteor add $names"
meteor add $names

我终于跑上流星了:

meteor
[[[[[ C:\meteor\Telescope ]]]]]

=> Started proxy.
=> Started MongoDB.
=> Started your app.

=> App running at: http://localhost:3000/

希望脚本对其他人有所帮助。

更新 2:此版本的脚本将适用于 PowerShell v2:

$root = Get-Location
$lock = "$(gc smart.lock)" -replace '[\s{},]+',' '
$lock = $lock -replace '^.*"packages":\s*',''
$lock = $lock -replace '"([^"]*)": "git": "([^"]*)" "tag": "[^"]*" "commit": "(\w+)" ',"`$1,`$2,`$3`n"

$names = @()
$lock -Split "`n" | Select-String ',' | %{
    $fields = $_ -Split ','
    $name = $fields[0]
    $git = $fields[1]
    $commit = $fields[2]

    $names += $name

    echo ('-' * 78)
    echo "Installing package: $name"
    cd "$root\packages"
    [Environment]::CurrentDirectory = Get-Location
    echo "=> git clone --recursive $git $name"
    git clone --recursive $git $name

    cd "$root\packages\$name"
    [Environment]::CurrentDirectory = Get-Location
    echo "=> git checkout $commit"
    git checkout $commit
}
cd $root
[Environment]::CurrentDirectory = Get-Location
echo "=> meteor add $names"
meteor add $names

【讨论】:

  • 确实,我在克隆“moment”包时遇到了问题,因为(来自 smart.lock)Telescope 需要“moment”和“momentjs”包(为什么?它们不同的?)。我确实克隆了两者,但这个过程并不是无缝的。 1. “momentjs” git 存储库说:“这个包正在被删除以支持github.com/acreeger/meteor-moment” 这是另一个(“moment”)包,那么我们该怎么做呢? 2. “moment” git 大部分是 empty 并且有一个“subgit”(子模块?),所以我也将它克隆到 inside “moment/lib” 目录。不是这样吗?
  • 另外,您提到了在服务器端运行的“包”。我只是将包添加到“/packages”文件夹中,我没有干预应用程序的逻辑。我看到 Telescope 在通用“/lib”文件夹中的某些文件中使用了与时刻相关的代码,所以我认为这是时刻试图在服务器上运行的地方?但是 Telescope 默认是这样写的,我没有做任何更改,这不应该很容易吗? (假设我正确地进行了克隆?)。谢谢!
  • @user2078023 我的 cmets 关于错误的那一刻,它通常在客户端使用更多地帮助解释错误消息。我知道时刻可以在服务器端使用(但“窗口”)是客户端的事情。
  • 至于子模块,我希望子模块会在您结帐时自动加载。关于这个主题,您是否检查了 smart.lock 文件中提到的确切修订/标签?
  • 谢谢! smart.lock 文件为“meteor”显示“2.6.0”,我使用这个。它还说“meteorjs”的“v2.1.0.2”,我也使用这个。仍然,我很困惑,是否需要“moment”和“momentjs”包?(也许这会产生冲突?)“ momentjs”在自述文件中说:“这个包正在被删除以支持github.com/acreeger/meteor-moment”但是,项目内部有对“momentjs”的引用(以及“moment”)。我正在努力寻找我做错了什么(希望:请有人为 Windows 创建 MRT,VC 支持的 METEOR 团队应该付钱给他)。
猜你喜欢
  • 2020-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 2017-07-16
  • 1970-01-01
  • 1970-01-01
  • 2019-08-02
相关资源
最近更新 更多