【快速开发】使用SvelteKit

自我介绍

  • 做一个简单介绍,酒架年近48 ,有20多年IT工作经历,目前在一家500强做企业架构.因为工作需要,另外也因为兴趣涉猎比较广,为了自己学习建立了三个博客,分别是【全球IT瞭望】,【架构师酒馆】和【开发者开聊】,有更多的内容分享,谢谢大家收藏。
  • 企业架构师需要比较广泛的知识面,了解一个企业的整体的业务,应用,技术,数据,治理和合规。之前4年主要负责企业整体的技术规划,标准的建立和项目治理。最近一年主要负责数据,涉及到数据平台,数据战略,数据分析,数据建模,数据治理,还涉及到数据主权,隐私保护和数据经济。 因为需要,比如数据资源入财务报表,另外数据如何估值和货币化需要财务和金融方面的知识,最近在学习财务,金融和法律。打算先备考CPA,然后CFA,如果可能也想学习法律,备战律考。
  • 欢迎爱学习的同学朋友关注,也欢迎大家交流。微信小号【ca_cea】

如何使用SvelteKit将利用服务器端渲染和Svelte的易用性的全栈应用程序连接在一起。

像Next.js和Gatsby这样的所谓元框架在过去几年里已经起飞了。本文将向您介绍最新的示例之一,SvelteKit的SvelteKit框架。与之前的Next.js一样,SvelteKit为构建反应式web应用程序提供了一个一体化的全栈平台。

SvelteKit是Sapper的继任者,Sapper是Svelte的上一代全栈预提交框架。

什么是SvelteKit?

SveltKit背后的理念是将前端和后端结合在一起,实现两全其美。除了实现简单的构建过程(因为整个堆栈是组合在一起的)外,SvelteKit还提供了以下开箱即用的好处:

  • 服务器端渲染
  • 代码拆分
  • 客户端路由
  • 简化的数据预取
  • 一个命令静态站点导出
  • 全栈热部署(开发模式)

这些好处的代价是更陡峭的学习曲线:您必须接受并吸收框架用于将应用程序的两个元素联系在一起的约定。然而,这些约定并不十分繁重,一旦掌握,开发就会以快速的步伐进行。


为了开始探索,我们将从默认的SvelteKit应用程序模板开始。(如果你想继续,这里提供了整个示例应用程序。)我们将使用Rollup模板(也提供Webpack)。在控制台中,键入

npm init svelte@next svelte-kit-intro

现在进入新创建的/svelte kit intro目录,运行npm install来安装Node.js模块。

现在,您可以使用npmrun-dev在开发模式下运行应用程序。如果您将浏览器打开到localhost:3000,您将看到应用程序正在运行,如图1所示。

图1. SveltKit入门应用程序

sveltekit welcome

SvelteKit中的路由是文件和文件夹

您的应用程序的每个页面都是一个Svelte组件。每个路由都映射到应用程序中的一个文件。

最重要的顶级目录是/src。您的大多数自定义代码都将存在于此。请注意/src/routes目录。这就是定义应用程序将支持的URL的地方。

文件夹对应于路径,文件对应于资源。应用程序的默认条目是/src/routes/index.svelte,它对应于根URL:localhost:3000/。每当文件夹路径有一个index.svelte文件时,该文件将作为空路径。

在您正在查看的入门应用程序的情况下,导航栏上的每个选项卡都对应于一条路线。单击“Todos”选项卡。查看来源:请注意,有一个/src/routes/Todos/index.svelte文件为该页面提供服务。

带下划线的非路由文件

您可以将JavaScript文件放在带有下划线的routes结构中的任何位置(例如,示例应用程序中的/src/routes/todos/_api.js文件)。这些文件可以用作共享的JS模块。

添加页面

这是客户端路由。SvelteKit将自动在服务器上为您预呈现这些页面,此时客户端的单页应用程序将接管。要了解它有多简单,让我们添加一个页面。创建一个/src/routes/infoworld.svelte页面,并将清单1中的内容放入其中。

清单1。新的InfoWorld页面

<main>
<img src="https://alt.idgesg.net/images/furniture/infoworld/infoworld-nameplate.svg" />
</main>
<style>
  main {
    background-color: #7f1231;
  }
  img {
    width: 500px;
  }
</style>

现在浏览到localhost:3000/infoworld,您将看到新页面。

SvelteKit中的布局

另一个重要的约定默认值是__layout.svelte文件(注意双下划线前缀)。此文件将自动定义应用于每个页面的布局。Svelte结合了槽的概念,__layout.Svelte利用这个想法来确定将内部内容放在哪里。清单2显示了布局当前的工作方式(为简洁起见,省略了样式)。

清单2__布局.svelte

<script>
        import Header from '$lib/header/Header.svelte';
        import '../app.css';
</script>
<Header />
<main>
        <slot />
</main>
<footer>
        <p>visit <a href="https://kit.svelte.dev">kit.svelte.dev</a> to learn SvelteKit</p>
</footer>
<style>
/* … */
</style>

除了插槽之外,布局还使用线段和页眉组件。segment是一个内置功能,它将用当前页面自动填充变量。这由Header组件用于确定要突出显示的菜单项。

现在,让我们为新的InfoWorld页面添加一个导航项目。打开src/lib/header/header.svelte文件。在无序列表(元素)中添加一个新的列表项,如清单3所示。请注意链接到InfoWorld页面的第四个新项目。

清单3。添加新菜单项

<ul>
  <li class:active={$page.path === '/'}><a sveltekit:prefetch href="/">Home</a></li>
  <li class:active={$page.path === '/about'}><a sveltekit:prefetch href="/about">About</a></li>
  <li class:active={$page.path === '/todos'}><a sveltekit:prefetch href="/todos">Todos</a></li>
  <li class:active={$page.path === '/infoworld'}><a sveltekit:prefetch href="/infoworld">Infoworld</a></li>
</ul>

现在,您将在浏览器中看到新的“信息世界”菜单项。请注意,我们使用从__layout传入的segment变量来突出显示基于页面名称的菜单项。

服务器端SvelteKit

现在让我们了解一下SvelteKit是如何将客户端与服务器集成在一起的。打开/src/routes/todos/index.svelte文件,并将其与您在localhost:3000/todos页面上看到的内容进行比较。请注意,该页面允许您创建新的todo,然后列出这些todo。SvelteKit是如何完成todo列表的?查看清单3中/src/routes/todos/index.svelte中的代码。

清单4。击中后端

<script context="module">
        import { enhance } from '$lib/form';
        // see https://kit.svelte.dev/docs#loading
        export const load = async ({ fetch }) => {
                const res = await fetch('/todos.json');
                if (res.ok) {
                        const todos = await res.json();
                        return {
                                props: { todos }
                        };
                }
                const { message } = await res.json();
                return {
                        error: new Error(message)
                };
        };
</script>

SvelteKit支持context=“module”属性。这会通知框架,应该在模块创建时而不是在组件实例化时评估里面的脚本。这意味着数据提取将立即发生。

现在考虑负载函数。它通过从一个相对的URL/todos.json获取数据来加载数据。SvelteKit在哪里可以找到这个资源?答案是SvelteKit使用了与客户端类似的映射约定。在这种情况下,URL将被转换为文件系统中的路径src/routes/todos/index.json.js。查看该文件,您将看到下面清单5中显示的代码。

处理请求

清单5从导入一个文件(_api.)开始;这只是在Node.JS中导入一个JS文件

清单5/src/routes/todos/index.json.js

import { api } from './_api';
// GET /todos.json
export const get = async (request) => {
        const response = await api(request, `todos/${request.locals.userid}`);
        if (response.status === 404) {              
          return { body: [] };
        }
        return response;
};
// POST /todos.json
export const post = async (request) => {
        const response = await api(request, `todos/${request.locals.userid}`, {              
          text: request.body.get('text')
        });
        return response;
};

清单5的其余部分涉及封送JSON,该JSON在后端rest请求和前端之间中介响应。我们导出一个get函数,该函数映射到我们从/src/todos/index.json.js中找到的get HTTP方法。并导出一个用于处理post todos的post函数。

请注意,这些端点函数类似于Express,但实际上并不是Express。请记住,SvelteKit的设计目的是最终在各种平台上运行,而不仅仅是Node.js,因此它是一个抽象的请求/响应API。

输出到特定的构建环境是通过适配器处理的。

URL路径参数

现在创建几个todo,然后编辑其中一个名称。更新todo名称是通过在src/routes/todos/index.svelte中提交到此URL来处理的:

“/todos/{todo.uid}.json?_method=patch”

请注意,{todo.uid}变量标记用于为URL路径提供ID。

这是由/src/routes/todos/[uid].json.js文件捕获的。

文件名中的方括号表示将填充URL参数的位置。这个标识符(“uid”)将提供给其中的代码。

打开[uid].js.js文件,查看在其中定义的PATCH方法,您将看到如何通过request.params.uid访问该路径参数,如清单6所示。

清单6。访问[uid].json.js中的路径参数

export const patch = async (request) => {

        return api(request, `todos/${request.locals.userid}/${request.params.uid}`, {

                text: request.body.get('text'),

                done: request.body.has('done') ? !!request.body.get('done') : undefined

        });

};

清单6还使用了前面看到的共享_api.js模块,该模块用于包装访问远程api的共享功能。

像Svelte一样简单

Svelte还有更多的秘密,但我们已经涵盖了基本内容。您已经了解了如何快速地将利用服务器端渲染的全栈应用程序连接在一起。你已经看到了Svelte如何让生活变得更轻松。

最后要注意的是,您可以使用服务器和客户端的npm运行构建创建生产构建,或者使用npm运行导出创建静态构建。

本文:【快速开发】使用SvelteKit | 开发者开聊

欢迎收藏  【全球IT瞭望】,【架构师酒馆】和【开发者开聊】.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/266439.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB遗传算法工具箱的三种使用方法

MATLAB中有三种调用遗传算法的方式&#xff1a; 一、遗传算法的开源文件 下载“gatbx”压缩包文件&#xff0c;解压后&#xff0c;里面有多个.m文件&#xff0c;可以看到这些文件的编辑日期都是1998年&#xff0c;很古老了。 这些文件包含了遗传算法的基础操作&#xff0c;包含…

YOLOv5算法改进(23)— 更换主干网络GhostNet + 添加CA注意力机制 + 引入GhostConv

前言:Hello大家好,我是小哥谈。本节课就让我们结合论文来对YOLOv5进行组合改进(更换主干网络GhostNet + 添加CA注意力机制 + 引入GhostConv),希望同学们学完本节课可以有所启迪,并且后期可以自行进行YOLOv5算法的改进!🌈 前期回顾: YOLOv5算法改进(1)— 如何去…

MyBatis笔记

Mybatis Mybatis介绍 什么是Mybatis? mybatis是支持普通SQL查询、存储过程和高级映射的优秀持久层框架。 Mybatis优点 几乎消除了JDBC代码和参数的手动设置消除结果集的检索使用XML或注解用于配置和原始映射&#xff0c;将接口和POJOs(实体类)映射成数据库中的记录。 My…

Qt/QML编程学习之心得:在QML中调用fileDialog(十六)

Qt中有一些内置的对话框dialog,比如 在QWidget工程中使用比较容易,比如 #include <QFileDialog>fileName = QFileDialog::getOpenFileName(this, tr("Open Image"), "/home/jana", tr("Image Files (*.png *.jpg *.bmp)")); 那么在QM…

oracle即时客户端(Instant Client)安装与配置

之前的文章记录了oracle客户端和服务端的下载与安装&#xff0c;内容参见&#xff1a; 在Windows中安装Oracle_windows安装oracle 如果不想安装oracle客户端&#xff08;或者是电脑因为某些原因无法安装oracle客户端&#xff09;&#xff0c;还想能够连接oracle远程服务&#…

智能优化算法应用:基于原子轨道搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于原子轨道搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于原子轨道搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.原子轨道搜索算法4.实验参数设定…

智能优化算法应用:基于跳蛛算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于跳蛛算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于跳蛛算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.跳蛛算法4.实验参数设定5.算法结果6.参考文献7.MA…

贪吃蛇(十)贪吃蛇吃食物

上节讲到限制蛇身回头&#xff0c;本节要实现吃食物功能 实现思路 在存储上食物方面可以复用蛇的结构体。初始化食物的时候&#xff0c;我们设置食物的坐标&#xff0c;每次调用这个函数的时候&#xff0c;坐标发生一些规律的变化。另外我们需要扫描食物的函数&#xff0c;这…

科研学习|论文解读——面向电商内容安全风险管控的协同过滤推荐算法研究

【论文完整内容详见知网链接】&#xff1a; 面向电商内容安全风险管控的协同过滤推荐算法研究 - 中国知网 (cnki.net) 面向电商内容安全风险管控的协同过滤推荐算法研究* 摘 要&#xff1a;[目的/意义]随着电商平台商家入驻要求降低以及商品上线审核流程简化&#xff0c;内容安…

一起学量化之macd指标

macd指标 1. macd指标定义 MACD的组成要素MACD称为异同移动平均线&#xff0c;是从双指数移动平均线发展而来的。MACD由一根快线、一根慢线、一根0轴线和无数根红绿柱状线组成。 如下图所示&#xff0c;粉色的是快线&#xff0c;也称DIFF线&#xff1b;蓝色的是慢线&#xf…

线程池构造方法的认识

线程池中构造方法的认识 文章目录 线程池中构造方法的认识corePoolSize (核心线程数)maximumPoolSize&#xff08;最大线程数&#xff09;keepAliveTime(非核心线程的空闲超时时间)TimeUnitworkQueuethreadFactoryRejectedExecutionHandler拒绝策略 标准库中提供了一个ThreadPo…

C语言 enum类型

enum,枚举,是 C 语言中的一种基本数据类型&#xff0c;用于定义一组具有离散值的常量&#xff0c;它可以让数据更简洁&#xff0c;更易读。 语法&#xff1a; enum 枚举名 {枚举元素1,枚举元素2,……}; 直接上例子 #include<stdio.h> enum DAY { MON1, TUE, WED, TH…

华为鸿蒙应用--封装数据持久化工具:首选项Preferences(鸿蒙工具)-ArkTs

一、使用方法&#xff1a; 0、初始化实例&#xff1a;一般在EntryAbility.ts的onWindowStageCreate中初始化&#xff1b;&#xff08;可忽略&#xff09; 1、将数据写入Preferences实例 function() {let arrayNum: number[] [1, 2, 3];let arrayStr: string[] ["5&quo…

2023美团机器人研究院学术年会成功举办

2023年12月19日&#xff0c;深圳市美团机器人研究院学术年会在清华大学深圳国际研究生院成功落下帷幕。会议回顾了研究院成立一年来的进展和成果&#xff0c;并邀请了各界专家共同讨论机器人技术的未来发展趋势。此外&#xff0c;年会期间还举办了首届低空经济智能飞行管理挑战…

Web前端复习

一、随堂练习 1.小题 margin vanish&#xff1a;border和inline-block都可以形成bfc二维数组转置&#xff1a;res[i] [];函数的不同声明定义&#xff1a; 有变量名字的函数&#xff0c;即便后面声明了同样的&#xff0c;以函数表达式为主&#xff1b;定义&#xff0c;运行。再…

VS Code实现“Ctr+save”保存代码自动格式化

一、下载Prettier - Code formatter插件 点击安装即可 二、配置 【1】打开文件——首选项——设置 或者左下角齿轮打开设置 【2】搜索设置框输入editor default formatter&#xff08;意思是默认格式化设置&#xff09;&#xff0c;接着下拉选中刚下好的插件名称Prettier - C…

网络爬虫之多任务数据采集(多线程、多进程、协程)

进程&#xff1a;是操作系统中资源分配的基本单位 线程&#xff1a;使用进程分配的资源处理具体任务 一个进程中可以有多个线程&#xff1a;进程相当于一个公司&#xff0c;线程就是公司里面的员工。 一 多线程 多线程都是关于功能的并发执行。而异步编程是关于函数之间的非…

N-136基于springboot,vue在线聊天系统

开发工具&#xff1a;IDEA 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 系统分前后台&#xff0c;项目采用前后端分离 前端技术&#xff1a;TypeScriptVue3.0ElementUI-Plus 服务端技术&#xff1a;springboo…

【常见的语法糖(详解)】

&#x1f7e9; 说几个常见的语法糖 &#x1f7e2;关于语法糖的典型解析&#x1f7e2;如何解语法糖&#xff1f;&#x1f7e2;糖块一、switch 支持 String 与枚举&#x1f4d9;糖块二、泛型&#x1f4dd;糖块三、自动装箱与拆箱&#x1f341;糖块四、方法变长参数&#x1f5a5;️…

十.MySQL数据类型精讲(一)

MySQL数据类型精讲 1.MySQL中的数据类型2.整数类型2.1类型介绍2.2可选属性2.2.1 M 2.2UNSIGNED2.3ZEROFILL2.3使用场景2.4如何选择 3.浮点类型3.1类型介绍3.2数据精度说明3.3精度误差说明 4.定点数类型4.2开发中经验 5.位类型&#xff1a;BIT 1.MySQL中的数据类型 类型类型举例…
最新文章