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