我只是在项目中添加了ember-cli-fastboot
(github),以便为爬虫程序机器人提供一个预渲染服务器。
完成以下安装步骤后,启动服务器时,我收到一条错误消息(ember fastboot --serve-assets
):
jQuery is not defined
ReferenceError: jQuery is not defined
at <anonymous>:66304:16 [...]
缓存中是否有需要清除的东西?
我缺少明显的东西吗?
最佳答案
FastBoot在Node中呈现,特别是在V8虚拟机中呈现,这意味着它无法访问DOM,而运行jQuery则需要该DOM。另外,作为沙盒虚拟机,它无法访问运行FastBoot代码的同一全局 namespace (除非您将其明确传递到沙盒中,请参阅: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,它在应用程序实例初始化时传递给呈现引擎。它是DOM方法的很小一部分,用于构建层次结构,然后序列化为HTML字符串。
关于jquery - Ember 快速启动Jquery,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34162398/