我正在对一个不是我编写的包运行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?
有什么想法吗?
您应该遵循迁移指南,特别是有关服务器 API 更改的部分。
render
现在是进口的,例如
import { render } from 'svelte/server';
import App from './App.svelte';
const { html, head } = render(App, { props: { message: 'hello' }});