【问题标题】:Angular-fullstack generator production app does not properly serve socket.io?Angular-fullstack 生成器生产应用程序不能正确地为 socket.io 服务?
【发布时间】:2015-06-10 05:01:56
【问题描述】:

我在通过相同设置和配置部署在 AWS 上的两个 angular-fullstack 应用程序之间遇到了麻烦。

尽管设置相同,但似乎 socket.io-client/socket.io.js 没有在其中一个上正确提供服务。

似乎在尝试获取 socket.io.js 时收到错误 400(错误请求),反过来又收到“io not defined”。

我已将范围缩小到这段代码:

var socketio = require('socket.io')(server, {
  serveClient: (config.env === 'production') ? false : true,
  path: '/socket.io-client'
});

似乎如果我将 serveClient 设置为始终为真,它将起作用,因为它始终为客户端提供服务。

如果是这样的话,为什么网上这么多资源将serveClient设置为false用于生产?它适用于一个应用,但不适用于另一个。

编辑:刚刚使用 serveClient: true 部署在 AWS 上。不工作。但显然它适用于我的本地。

编辑 2:为正在运行的应用程序做了一个npm install,现在它坏了,所以可能是包坏了。

编辑 3:在 grunt build:dist 和相同问题之后对 NODE_ENV=production 进行了测试,因此它应该是其中一个包的问题。

【问题讨论】:

  • AWS 配置肯定没有差异?我会尝试在另一个应用程序的机器上运行正在运行的应用程序,以查看代码或机器配置是否存在问题。 (我猜是虚拟服务器……)
  • 它在同一台机器上,一切都一样,因为我使用 yeoman 搭建脚手架,只添加了内容。我唯一能想到的是,也许我以某种方式搞砸了 nginx,但它也几乎只是第一个应用程序的副本。我看了一下前端,它说“io is not defined”,socket.io.js 出现错误 400

标签: javascript angularjs node.js socket.io angular-fullstack


【解决方案1】:

原来 angular-fullstack 的内置 grunt 文件将获取 bower.json 中的所有依赖项(通过wiredep),其中包括 google-code-prettify/bin/prettify.min.js,因为我已经安装了它。

缩小过程在某种程度上与已经缩小的 prettify.min.js 不兼容(在其他缩小文件之前从未真正遇到过这个问题)。

所以我必须在wiredep.target.exclude 属性中包含一个正则表达式来排除google-code-prettyify/**/.js 文件并手动包含未缩小的/src/prettify.js 文件。

我感觉 google-code-prettify 包引起了问题,因为我记得 JSHint 之前抱怨过它。

希望这能让人们意识到 npm 包可能会以某种间歇性方式被破坏。

【讨论】:

  • 我有同样的问题,但不清楚你的解决方案。你愿意分享一些代码吗?
  • 抱歉,已经 2 年了,我完全忘记了这是怎么回事。从我写的内容来看,我似乎只是排除了在 google-code-prettify/bin/prettify.min.js 文件上完成的任何自动化操作,然后将其按原样包含在其他地方。
猜你喜欢
  • 2020-03-08
  • 2021-06-07
  • 1970-01-01
  • 2015-02-04
  • 1970-01-01
  • 2018-04-18
  • 1970-01-01
  • 2019-12-25
  • 1970-01-01
相关资源
最近更新 更多