为什么预加载在站点的本地开发版本与站点的本地导出版本中表现不同?

Why would a preload behave differently in the local dev version of the site vs. the local exported version of the site?

Svelte 3.34.0,Sapper 0.28.10.

归档于 /src/routes/data/index.svelte。 Url 模式是 http://localhost:3000/data/?day=40http://localhost:3000/data/(默认为当天)。该页面从远程 url 获取 JSON 数据并显示它。

<script context="module">
  import { buildDataUrl, formatDate } from '../../helpers';
  import moment from 'moment';

  export async function preload(page) {
    const query = page.query;
    let day = Number.parseInt(query.day);
    if (Number.isNaN(day)) day = moment().dayOfYear();
    console.log(`preload fired, day: ${day}, ${JSON.stringify(query)}`);
    const get = await this.fetch(buildDataUrl(day), {

当我 运行 在本地开发模式下使用 sapper dev 时,url 查询参数得到尊重并被正确使用。当查询字符串发生变化时,页面将重新呈现,方法是编辑它或单击页面上的 link。

当我 运行 在本地使用 npx sapper export && npx serve __sapper__/export(参见文档 here)并转到 http://localhost:5000/data/?day=40 时,日期值始终默认为当天,无论是什么在查询字符串中。即使使用 ?day=a 也不会改变行为——这会导致错误。

预加载文档是 here

这感觉像是一个错误,但我不能确定。

我试图复制它,但即使导出它在我的机器上也能按预期工作。

并且因为你有这一行 if (Number.isNaN(day)) day = moment().dayOfYear(); 即使你将 NaN 传递给查询它也会替换为当前日期所以我不明白为什么它会导致错误

通过与 Discord 上的开发人员聊天,我发现您必须使用页面存储来访问查询字符串,然后 运行 页面脚本中的任何异步提取,而不是模块脚本。