如何使用Svelte和Sveltekit构建和测试博客
#javascript #前端 #svelte #sveltekit

如果您正在寻找一种现代建立博客的方式,那么Svelte和Sveltekit是不错的选择。 Svelte是一个轻巧的反应性框架,可编译您的代码为高度优化的香草JavaScript。 Sveltekit是构建在Svelte顶部建立Web应用程序的框架,提供服务器端渲染,路由和其他功能。

在本教程中,我们将向您展示如何使用Sveltekit构建一个简单的博客,以及如何使用Jest和Svelte-Jester为其编写单元测试。在教程结束时,您将拥有一个功能齐全的博客,可以进行部署,并且您将拥有对其进行测试并确保其质量的工具。

建立博客

创建一个新的Sveltekit项目
首先,您需要创建一个新的Sveltekit项目。最简单的方法是使用DEGIT,即克隆存储库的工具。

打开终端并运行以下命令:

npx degit
sveltejs/sveltekit
my-blog

这将创建一个称为My-B-B-B-Blog的新目录,然后将Sveltekit启动器模板克隆到其中。

创建基本页面和路由
接下来,我们将为博客创建基本页面和路线。在Sveltekit中,在SRC/ROUTES目录中创建了页面为.svelte文件。

让我们从创建主页开始。在src/routes目录中创建一个名为index.svelte的新文件,并添加以下代码:


<script>
  export let posts = [];
</script>

<h1>Welcome to my blog!</h1>

{#if posts.length}
  <ul>
    {#each posts as post}
      <li>
        <a href={`blog/${post.id}`}>
          {post.title}
        </a>
      </li>
    {/each}
  </ul>
{:else}
  <p>No posts yet.</p>
{/if}

此代码定义了显示博客文章列表的Svelte组件。 Export Let Poste Line定义了可以从父组件或路由定义传递给组件的属性。

接下来,让我们为主页创建路由定义。在SRC/ROUTES目录中创建一个名为index.json.js的新文件,并添加以下代码:

import posts from './_posts.js';

export async function get() {
  return {
    body: {
      posts
    }
  };
}

此代码定义了一条路由,该路由返回包含博客文章列表的JSON对象。帖子数组是从名为_posts.js的文件导入的,我们将下一步创建。

现在创建_posts.js文件。在SRC/ROUTES目录中创建一个名为_posts.js的新文件,并添加以下代码:


export default [
  {
    id: '1',
    title: 'My First Blog Post',
    content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
  },
  {
    id: '2',
    title: 'My Second Blog Post',
    content: 'Vivamus euismod metus sit amet arcu consectetur, vel ultricies dolor fringilla.'
  }
];

此代码定义了两个博客文章对象的数组。每个对象都有ID,标题和内容属性。

现在,我们有了一个基本主页,显示博客文章列表。让我们为博客创建更多页面

创建单个博客文章页面

接下来,我们将为每个博客文章创建单个页面。在SRC/ROUTES目录中创建一个名为[_id] .svelte的新文件,并添加以下代码:

<script>
  export let post = {};
</script>

<h1>{post.title}</h1>

<p>{post.content}</p>

此代码定义了一个显示单个博客文章的Svelte组件。导出LET POST LINE定义了可以从父组件或路由定义传递给组件的属性。

接下来,让我们为单个博客文章页面创建路由定义。在SRC/ROUTES目录中创建一个名为[_id] .json.js的新文件,并添加以下代码:

import posts from './_posts.js';

export async function get({ params }) {
  const post = posts.find(p => p.id === params.id);
  if (post) {
    return {
      body: {
        post
      }
    };
  } else {
    return {
      status: 404
    };
  }
}

此代码定义了从URL获取ID参数的动态路由。然后,它在帖子数组中搜索带有该ID的博客文章对象,并将其返回为JSON对象。如果ID不匹配任何博客文章,则返回404状态。

样式博客
现在,我们已经设置了基本页面和路线,让我们在博客中添加一些样式。 Sveltekit随时支持CSS模块的支持,因此我们将使用它来设计我们的组件。

在src目录中创建一个名为global.css的新文件,并添加以下代码:


h1 {
  font-size: 2.5rem;
  margin: 2rem 0;
}

ul {
  list-style: none;
  padding: 0;
}

li {
  margin: 1rem 0;
}

a {
  color: #000;
  text-decoration: none;
}

a:hover {
  text-decoration: underline;
}

此代码定义了博客的一些基本样式,例如字体大小,边距和文本装饰。

接下来,我们将将此CSS文件导入到我们的Svelte组件中。在每个.svelte文件中,在顶部添加以下行:

<style global>
  @import './global.css';
</style>

此代码将global.css文件导入组件的样式。

建立和测试博客

现在我们已经构建了博客,让我们构建和测试它。要构建博客,请在终端中运行以下命令:

npm run build

这将编译Svelte代码并在“构建目录”中创建一个可以生产的构建。

要测试博客,我们将使用Jest和Svelte-Jester。 Jest是一个流行的JavaScript测试框架,Svelte-Jester是一个插件,允许我们为Svelte组件编写单元测试。

首先,让我们安装依赖项。在终端中运行以下命令:

npm install --save-dev jest svelte-jester

接下来,在src目录中创建一个名为example.test.js的新文件,并添加以下代码:

import { render } from '@testing-library/svelte';
import Example from './Example.svelte';

test('renders the text "Hello, world!"', () => {
  const { getByText } = render(Example);
  expect(getByText('Hello, world!')).toBeInTheDocument();
});

此代码定义了一个称为示例的Svelte组件的单元测试。它使用 @testing-library/svelte的渲染函数来渲染组件,而getByText函数可以找到带有文本“ Hello,World!”的元素。期望功能检查该元素是否在文档中。

您可以通过在终端中运行以下命令来运行测试:

npm run test

这将在SRC目录中运行所有测试。

在本教程中,我们看到了如何使用Svelte和Sveltekit构建博客。我们创建了一个主页,该页面显示了博客文章列表,每个博客文章的单个页面,并在博客中添加了一些基本样式。我们还学会了如何使用Jest和Svelte-Jester测试我们的Svelte组件。

Svelte和Sveltekit提供了一种强大而简单的构建Web应用程序的方法,它们的尺寸小和性能使其非常适合现代Web开发。