使用 SvelteKit 的 RSS 提要

RSS feed with SvelteKit

我一直在尝试为我的网站生成 RSS 提要。虽然它在开发环境中完美运行,但在为生产环境构建时不会生成 xml 文件。

由于我以相同的方式创建了一些 json 文件并且这些文件已正确生成,我怀疑 xml.ts 格式可能不会被视为构建目标。

有人知道解决办法吗?

源代码(src/routes/rss.xml.ts)

import { getPosts } from '../lib/posts/getPosts';

const xml = (posts: postMeta[]) => `<?xml version="1.0" encoding="UTF-8" ?>
<rss xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:atom="https://www.w3.org/2005/Atom" version="2.0">
<channel>
  <title>Kota Yatagai</title>
  <link>https://kota-yata.com</link>
  <description><![CDATA[Personal Blog & Stuffs by Kota Yatagai]]></description>
  ${posts.map(
    post => `
      <item>
        <title><![CDATA[${post.meta.title}]]></title>
        <description><![CDATA[${post.meta.description}]]></description>
        <category>${post.meta.category}</category>
        <link>https://kota-yata.com/posts/${post.path}</link>
        <guid isPermaLink="true">https://kota-yata.com/posts/${post.path}</guid>
        <pubDate><![CDATA[ ${post.meta.date}]]></pubDate>
        <enclosure url="${post.meta.ogp || `https://kota-yata.com/ogp.webp`}" length="0" type="image/webp"/>
        <dc:creator>Kota Yatagai</dc:creator>
      </item>
    `
  ).join('')}
</channel>
</rss>`;

// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
export const get = () => {
  const headers = {
    'Cache-Control': 'max-age=0, s-maxage=600',
    'Content-Type': 'application/xml',
  };
  const posts = getPosts();
  const body = xml(posts);
  return { body, headers };
};

svelte.config.js(以防万一)

import adapter from '@sveltejs/adapter-static';
import preprocess from 'svelte-preprocess';

/** @type {import('@sveltejs/kit').Config} */
const config = {
  // Consult https://github.com/sveltejs/svelte-preprocess
  // for more information about preprocessors
  preprocess: preprocess(),

  kit: {
    // hydrate the <div id="svelte"> element in src/app.html
    target: '#svelte',
    adapter: adapter({
      pages: 'build',
      assets: 'build',
      fallback: null
    })
  },
};

export default config;

一个可能的原因是您没有link发送到此端点的任何内容。

当 SvelteKit 构建您的静态页面时,它将从主页 (index.svelte) 开始并抓取您的整个网站,“点击”每个 link,呈现页面并将其写入文件系统.但这意味着将不会呈现任何 non-linked 个页面。

这可能是你的问题,如果只是在 rss.xml 的某处添加一个 link,它也会正确生成该页面。