我刚刚在我的项目中添加了 ember-cli-fastboot
( github ),以便为爬虫机器人提供预渲染服务器。
按照安装步骤操作后,我在启动服务器时收到错误消息 (ember fastboot --serve-assets
):
jQuery is not defined
ReferenceError: jQuery is not defined
at <anonymous>:66304:16 [...]
缓存中是否有需要清理的内容? 我是否遗漏了一些明显的东西?
最佳答案
FastBoot 在 Node 中渲染,特别是在 V8 虚拟机中,这意味着它无法访问运行 jQuery 所需的 DOM。此外,作为沙盒虚拟机,它无法访问 FastBoot 代码运行所在的同一全局命名空间(除非您显式地将其传递到沙盒中,请参阅: https://www.ember-fastboot.com/docs/user-guide 上的“使用白名单节点依赖项”)。
如果您要通过 jQuery 节点模块传递 jQuery,并在应用程序代码中公开,您仍然无法在 FastBoot 模式下运行大部分 jQuery API,因为它严重依赖于 DOM API,而这些 API 根本不支持此环境中不存在。
但有时您需要在浏览器中进行一些 DOM 操作,以处理复杂的动画或用户交互。建议的解决方案是将所有需要 DOM 操作的代码保留在 didInsertElement
或 willInsertElement
组件生命周期事件处理程序中,这些处理程序明确不在 FastBoot 模式下运行。
不推荐的另一个选项是通过检查来包装对出错的 jQuery 的调用,以确保您不在 FastBoot 中(请参阅上面的用户指南中的“FastBoot 服务”)
在这种情况下,您不需要将模块列入白名单,因为 FastBoot 永远不应该执行依赖于 jQuery 的代码。
旁注: Ember 清楚地呈现 HTML,并且它需要某种方法来构造类似 DOM 的结构。 FastBoot 作者创建了 SimpleDOM它在应用程序实例初始化时传递给渲染引擎。它是 DOM 方法的一个非常小的子集,用于构造层次结构,然后序列化为 HTML 字符串。
关于jquery - Ember Fastboot Jquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34162398/