Yeoman“grunt test”在干净的项目上失败,“端口已被使用”

8

使用以下环境:

  • Mac OS 10.8.4
  • Node 0.10.12
  • npm 1.3.1
  • grunt-cli 0.1.9
  • yo 1.0.0-rc.1
  • bower 0.9.2
  • generator-angular@0.3.0

在一个干净的yo angular项目中,我遇到了以下错误,然后执行grunt servergrunt test命令:

Running "connect:test" (connect) task  
Fatal error: Port 9000 is already in use by another process.

我是Yeoman的新手,现在遇到了难题。我已经删除了原始项目,并在一个新的文件夹中创建了一个新项目,以确保我没有忽略任何不可见的配置。我重启了计算机,以确保没有运行我忘记的任何临时服务器进程。尝试多次后,基本服务器可以正常启动,连接到Chrome,并且观察程序会在任何更改时更新浏览器。(值得注意的是,服务器正在9000端口上运行,这似乎与测试运行程序也在尝试使用9000有些奇怪)。但是我在尝试启动测试运行程序时仍然遇到了同样的错误。
这是可以修复的问题吗?还是应该向Yeoman团队报告此问题?谢谢。

你尝试过在Gruntfile.js中更改测试任务的端口吗?正如你所提到的,livereload和test默认使用相同的端口,这可能是问题所在。 - Narretz
1
这是很奇怪的事情:它们似乎都在使用相同的数据。如果我将connect.options.port更改为9001,那么livereload和test都会尝试使用9001,并且错误中只会得到一个不同的端口号。我对为什么会这样编写以及为什么没有两个具有不同端口号的单独配置感到困惑。 - XML
我猜默认配置并不假设您同时运行服务器和测试。也许期望在文件更改时自动运行测试,或在构建之前运行它们。 - Narretz
3个回答

5

port: 9001 添加到测试中,像这样:

test: {
  options: {
    port: 9001,
    ...
  }
}

是的,请看我的上面的回答,我提到将 connect.test.options.port 设置为 9001。 - XML
我也尝试了这个,但是没有运气,使用了polymer-generator。 - FutuToad

2
我创建了一个新的配置属性:connect.test.options.port,并将其设置为9001。现在它们似乎在不同的端口上运行正常。
请注意,Gruntfile.js 覆盖了karma.conf.js 中的 singleRun 属性。如果您希望karma.conf.js 中的配置正常工作,请注释/删除该部分。
编辑日期11/4/13: 其他人也报告了这个问题,似乎通过对generator-angular进行更改已解决。

1
更改端口后,出现XHR错误, 'Access-Control-Allow-Origin'头部的值为'http://localhost:9000',与提供的来源不相等。因此,源'http://localhost:9090'被禁止访问。 最初是9000,然后我改变了grunt。
connect: {
  main: {
    options: {
      port: 9090
    }
  }
}

明白了,这是服务器问题,不是客户端的问题。 - thisarattr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接