javascript - Angular-fullstack 生成器生产应用程序无法正确服务于 socket.io?

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

我在通过相同设置和配置部署在 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 用于生产呢?它适用于一个应用程序,但不适用于另一个应用程序。

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

编辑 2:为正在运行的应用程序安装了一个 npm install,现在它坏了,所以可能是软件包出了问题。

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

最佳答案

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

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

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

我感觉 google-code-prettify 包导致了问题,因为我记得 JSHint 之前提示过它。

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

关于javascript - Angular-fullstack 生成器生产应用程序无法正确服务于 socket.io?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30725345/

相关文章:

javascript - 检查javascript对象是否有嵌套的键值对

javascript - 通过 ng-model 为复选框赋值

javascript - 根据参数将对象从一个数组推送到另一个数组

Javascript - 字符串到多层数组

ruby-on-rails - 如何将 AngularJS 与 Rails 表单一起使用?

javascript - 将函数变量与数组循环进行比较

node.js - 使用 Node js imap 读取电子邮件正文

angularjs - Passport.js、Express.js 和 Angular.js 路由 : how can they coexist?

node.js - 为什么我不能将 api 参数传递给 lambda 函数?

javascript - 如何在没有新 key 的情况下更新现有父级的一个 Firebase 子级?