【问题标题】:How to do SSR with stencil.js in a project with Nuxt.js (SSR as well)如何在使用 Nuxt.js 的项目中使用 stencil.js 进行 SSR(以及 SSR)
【发布时间】:2019-06-16 21:39:33
【问题描述】:

我想在我的nuxt 项目中使用stencil 库。

我能够让它工作,但是当 vue 组件在服务器端呈现时,我只能让 stencil 的组件在客户端呈现。

我认为最大的问题是defineCustomElement 需要window 作为参数。

我知道stencil.js 有那个“prerender”,在我的理解中基本上是 SSR,我想和Nuxt.js SSR 一样使用它。

所以我的问题是:如何配置nuxt 项目以支持stencil.js 的服务器端渲染?

【问题讨论】:

  • 你不能。对 SSR 的支持应该在库级别完成。所以 stencil.js 要么支持 ssr,要么不支持。如果它依赖于窗口 - 它不支持 ssr。

标签: javascript nuxt.js server-side-rendering stenciljs


【解决方案1】:

更新:我目前正在开发一个 Nuxt 模块以与基于 stencil.js 的库集成。

https://github.com/Gomah/nuxt-stencil

它的作用:

  • 它使用 render:routegenerate:page 为基于 SSR 的应用程序(通用或构建时)创建两个挂钩,它将在将请求发送回浏览器之前呈现模板组件。

  • 它为 CSR 注入一个插件,以从您的模板库中定义自定义元素,如 here 所述。

⚠️ 注意:Vue 在 CSR 上 hydrating 时会抛出一些错误,这可能是由于渲染器在渲染模板组件时注入的 cmets



过时的评论,在 Stencil V1 之前:

根据comment 看来,Stencil v1 可能会解决 SSR:

Stencil One 将使用 dist-hydrate-script 输出目标生成 一个节点脚本,可以用来补充你的脚本。然后 生成的 dist/hydrate/index.js 脚本是你可以重用的东西 许多位置(Angular Universal、Express Middleware、custom 预渲染等)。

如果您正在预渲染,您只需添加 --prerender 标记到您的模板构建,它会为您处理所有这些。 我们仍在积极开展这项工作,并希望尽快发货。谢谢

Github 相关问题:

https://github.com/ionic-team/stencil/issues/1036

https://github.com/ionic-team/stencil/issues/1449

【讨论】:

    【解决方案2】:

    哦,是的,正如 Aldarund 所说,你不能,我仔细查看了 prerendering page,据说预渲染发生在构建时,所以这不可能:/太糟糕了

    【讨论】:

      【解决方案3】:

      确实,你有一个解决方法

      1. 您必须在 unpkg 或任何其他公共(或私有)CDN 中发布您的 Web 组件
      2. 在您的 nuxt.config.js 文件中,在您的部分脚本中添加脚本。此脚本必须引用到您的公共库 (https://stenciljs.com/docs/javascript)

      更多关于如何在你的nuxt项目中添加外部资源的信息,请阅读:https://nuxtjs.org/faq/ -> 如何使用外部资源

      干杯

      【讨论】:

      • 抱歉,这种方法适用于服务器端渲染吗?是否以预渲染的方式交付给客户端?
      猜你喜欢
      • 1970-01-01
      • 2020-06-28
      • 2019-09-20
      • 2020-02-19
      • 2022-07-03
      • 2020-03-08
      • 2021-04-14
      • 2021-01-22
      • 2019-10-18
      相关资源
      最近更新 更多