我只是在我的项目中添加了ember-cli-fastboot (github),以便为爬虫机器人提供预渲染服务器。
在完成以下安装步骤后,在启动服务器(ember fastboot --serve-assets)时会收到一条错误消息:
jQuery is not defined
ReferenceError: jQuery is not defined
at <anonymous>:66304:16 [...]缓存里有什么东西需要清理吗?我漏掉了什么明显的东西吗?
发布于 2016-08-08 14:35:19
FastBoot在Node中呈现,特别是在V8虚拟机中,这意味着它无法访问DOM,而DOM是运行jQuery所必需的。另外,作为一个沙箱vm,它无法访问运行FastBoot代码的同一个全局命名空间(除非您显式地将它传递到沙箱中,请参阅:“使用https://www.ember-fastboot.com/docs/user-guide上的白色节点依赖项”)。
如果要通过jQuery节点模块传递jQuery,并在应用程序代码中公开,仍然无法在FastBoot模式下运行很多jQuery的API,因为它在很大程度上依赖于这个环境中根本不存在的DOM。
但有时,您需要在浏览器中执行一些DOM操作,以处理复杂的动画或用户交互。建议的解决方案是将所有需要DOM操作的代码保留在didInsertElement或willInsertElement组件生命周期事件处理程序中,后者显式地不以FastBoot模式运行。
另一个不建议使用的选项是将对jQuery的调用包装在错误的检查中,以确保您不在FastBoot中(参见上面用户指南中的“FastBoot服务”)。
在这种情况下,您不需要白名单模块,因为FastBoot不应该执行依赖于jQuery的代码。
附带注意:成员清楚地呈现HTML,它需要某种方式来构造类似DOM的结构。FastBoot作者创建了在Application时传递给呈现引擎的SimpleDOM。它是一个非常小的DOM方法子集,用于构造层次结构,然后序列化为HTML字符串。
https://stackoverflow.com/questions/34162398
复制相似问题