Cheerio / svelte 5:渲染不是一个函数

问题描述 投票:0回答:1

我正在对一个不是我编写的包运行cheerio(1.0.0)测试,所以我对它的了解并不完整,(显然)我想做最少的事情来让它工作。 我已将软件包从 svelte 4 升级到 svelte 5。测试在 svelte 4 下运行。

这是失败的代码 - ssr.test.js

import cheerio from "cheerio";
// eslint-disable-next-line import/extensions, import/no-unresolved
import app from "./dist/App";

const createSelector = testId => `[data-testid="${testId}"]`;

const render = url => {
    const { html } = app.render({ url });
    return testId => cheerio.load(html)(createSelector(testId));
};

App.js 文件没有渲染功能。请注意,尽管测试套件确实包含已升级为使用符文的 svelte 文件,但这两个文件都不是 svelte。

错误是

TypeError: _App.default.render is not a function

   6 |
   7 | const render = url => {
>  8 |      const { html } = app.render({ url });
     |                           ^
   9 |      return testId => cheerio.load(html)(createSelector(testId));
  10 | };
  11 |

所以我同意这个错误,render 不是 App 中的函数,但此代码在升级过程中没有更改,App.js 和 ssr.test.js 都没有更改。

在输出之前我收到许多循环依赖错误,例如

循环依赖: node_modules/svelte/src/internal/client/runtime.js -> node_modules/svelte/src/internal/client/reactivity/effects.js -> node_modules/svelte/src/internal/client/runtime.js

我已将 svelte 升级到 5.2.12,按照 rollup-plugin-svelte github 问题 #230 中的建议无济于事。

所以我不确定这个问题源自何处 - rollup-plugin-svelte?或者移动 svelte 5 代码?或者 Cheerio 和 svelte 5?

有什么想法吗?

cheerio rollupjs svelte-5
1个回答
0
投票

您应该遵循迁移指南,特别是有关服务器 API 更改的部分。

render
现在是进口的,例如

import { render } from 'svelte/server';
import App from './App.svelte';

const { html, head } = render(App, { props: { message: 'hello' }});
© www.soinside.com 2019 - 2024. All rights reserved.