百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 文章教程 > 正文

今年最火开源前端框架——Svelte 5正式发布稳定版、彻底重写、新增$语法 、star数近8万

yund56 2025-03-31 17:49 13 浏览

OSCHINA


经过近 18 个月的开发,数十名贡献者提交了数千次代码,Svelte 5 终于发布了稳定版,这是该项目历史上最重要的版本。

Svelte 是一款类似 React、Vue 的前端 UI 框架。

如名字所言, Svelte 的体积非常小,其作者 Rich Harris 表示,他设计 Svelte 的核心思想在于“通过静态编译减少框架运行时的代码量”。

Svelte 5 是一次彻底的重写:开发的应用将变得更快、更小、更可靠同时将能够编写更一致、更符合语法习惯的代码。对于框架的新手来说,需要学习的东西更少。

值得关注的是,Svelte 几乎完全向后兼容 Svelte 4,也就是说初始升级将完全无缝:

Svelt 官方介绍,随着越来越多的人使用 Svelte 构建更多、更大的应用程序,最初的一些设计决策的局限性开始变得更加明显。

例如,在 Svelte 4 中,响应性完全由编译器驱动。如果在 Svelte 4 中更改响应对象的单个属性,则整个对象将失效,因为这是编译器实际能做的全部。

与此同时,其它框架采用了基于信号的细粒度响应性,超越了 Svelte 的性能。

同样,Svelte 4 中的组件组合也比较尴尬,主要是因为它将事件处理程序和“插槽内容” (slotted content) 视为独立的概念,与传递给组件的 props 不同。

这是因为在 2019 年,Web 组件似乎很有可能成为组件的主要分发机制,而 Svelte 希望与平台保持一致。现在看,这其实是一个错误选择。

虽然 $ 的构造响应式重新运行语句是一个巧妙的技巧,但结果却是徒劳无功。它混淆了两个本应分开的概念(派生状态和副作用),而且由于依赖关系是在语句编译时而不是运行时确定的,因此它无法重构,搞得越来越复杂。

Svelte 5 消除了这些不一致和麻烦。它引入了 runes,这是一种显式机制,用于声明响应式状态(当然它还有其它作用):

与状态的交互没有改变:与其它框架不同,count 只是一个数字,而不是一个函数,或者具有值属性的对象,或者只能通过相应的 setCount 来更改的东西。

function increment() {
count += 1;
console.log({ count });
}

runes 可以在 .svelte.js 和 .svelte.ts 模块中使用,除了 .svelte 组件,这意味着可以使用单一机制创建可重用的响应式逻辑。

事件处理程序现在就像其它属性一样,比如可以很容易知道组件用户是否提供了特定的事件处理程序(这对于避免昂贵的设置工作非常有用),或者将任意事件处理程序传播到某个元素上,这些对库作者尤其重要。

用于在组件之间传递内容的插槽机制,以及令人困惑的 let: 和 语法,已被 {#snippet …} 替代,这是一个更强大的工具。

除了这些变化,还有无数改进:原生 TypeScript 支持(不再需要预处理器!)、许多错误修复,以及整体性能和可扩展性的提升。

此外,随着 Svelte 的新版本发布,也推出了新的命令行界面 (CLI),sv。而利用新的 Svelte 5 特性的 SvelteKit,也在计划中了。
详情查看官方公告:https://svelte.dev/blog/svelte-5-is-alive

最后看看 Svelte 5 重要的语法更新:
Runes - 符文
本次最重要的更新,当 Runes 莫属,这是关于变量定义和效果管理的内容。

Svelte v4 的响应式写法:

<script>
let count = 0;
</script>

<button onclick={() => count++}>
clicks: {count}
</button>
Svelte v5 的响应式写法:
<script>
let count = $state(0);
</script>

<button onclick={() => count++}>
clicks: {count}
</button>
哈哈,是不是新语法有一种 Vue 的既视感?
正所谓,万法归一,殊途同归。
那么不仅如此,类似这样的语法,大概有这么些:

o $state

o $state.raw

o $state.snapshot

o $derived

o $derived.by

o $effect

o $effect.pre

o $effect.tracking

o $effect.root

o $props

o $bindable

o $inspect

o $host

这不禁让我回想起了 10 年前写 PHP 的时候,满屏幕的 $ 的日子。。。

不过还是那句话,习惯就好,我喜欢新语法,喜欢 $
Snippets - 片段
片段的主要作用,就是让你少写重复代码。
笔者看到这个,只感觉两行感动的热泪流了下来 。
Vue 中的类似功能是这样的:
<script setup>import{ createReusableTemplate } from '@vueuse/core'; const[DefineTemplate,ReuseTemplate]= createReusableTemplate();</script>
<template>
<DefineTemplate>
</DefineTemplate>
<dialogv-if="showInDialog">
<ReuseTemplate/></dialog>
<divv-else>
<ReuseTemplate/></div>
</template>
Svelte v4 的写法:
{#each images as image}
{# if image.href}
<a href={image.href}>
<figure>
<img
src={image.src}
alt={image.caption}
width={image.width}
height={image.height}
/>

<figcaption>{image.caption}</figcaption>
</figure>
</a>
{:else}
<figure>
<img
src={image.src}
alt={image.caption}
width={image.width}
height={image.height}
/>

<figcaption>{image.caption}</figcaption>
</figure>
{/if}
{/each}
Svelte v5 的写法:
{#snippet figure(image)}
<figure>
<img
src={image.src}
alt={image.caption}
width={image.width}
height={image.height}
/>

<figcaption>{image.caption}</figcaption>
</figure> {
/snippet}

{#each images as image}
{#if image.href}

<a href={image.href}>
{@renderfigure(image)}
</a>
{:else}
{@renderfigure(image)}
{/if}
{/each}
代码是人在写,人在看,电脑只是执行一串二进制。
写法上的提升,对于编程体验的影响是非常大的,代码应该优先服务于人,其次才服务于机器。
这种编程体验的改变,不亚于钓鱼佬钓到一条重达 2 两的大鲫鱼的快感。
Event handlers - 事件处理
Svelte v4 单事件的写法
<script>
let count = $state(0);
</script>

<button on:click={() => count++}>
clicks: {count}
</button>
Svelte v5 单事件的写法
<script>
let count = $state(0);
</script>

<button onclick={() => count++}>
clicks: {count}
</button>
Svelte v4 多事件的写法
<button on:click={one} on:click={two}>
...
</button>
Svelte v5 多事件的写法
<button
onclick={(e) =>
{
one(e);
two(e);
}}
>
...
</button>
Svelte v4 事件修饰符的写法
<button on:click|once|preventDefault={handler}>...</button>
Svelte v5 事件修饰符的写法
<script>
functiononce(fn){
returnfunction(event){
if(fn) fn.call(this, event);
fn =;
};
}

functionpreventDefault(fn){
returnfunction(event){
event.preventDefault();
fn.call(this, event);
};
}
</script>

<button onclick = {
once(preventDefault(handler))
} >
... < /button>
事件上面的写法,给我的感觉就是,返璞归真了。
说实话,我喜欢原来的写法。
Imports - 导入
flushSync
<script>
import {
flushSync
}from 'svelte';

let count = $state(0);
let element;

functiononclick(){
flushSync(() =>(count +=1));

// without `flushSync`, the DOM would be updated in the future
console.log(element.textContent===String(count));
}
</script>

<span bind: this = {element}>{count}</span>
<button {onclick}>update</button>
mount
import {
mount
} from 'svelte';
importAppfrom './App.svelte';

const app = mount(App, {
target: document.querySelector('#app'),
props: {some: 'property'}
});
hydrate
import {
hydrate
} from 'svelte';
importAppfrom './App.svelte';

const app = hydrate(App, {
target: document.querySelector('#app'),
props: {some: 'property'}
});


本文部分内容来自「陈随易」公众号,已获授权转载。

1年272个版本后,Svelte v5终于发布了


相关来源

https://svelte.dev/blog/svelte-5-is-alive

https://mp.weixin.qq.com/s/J0fnK5ufOvH9_wyZUPPJ7Q





END







相关推荐

SM小分队Girls on Top,女神战队少了f(x)?

这次由SM娱乐公司在冬季即将开演的smtown里,将公司的所有女团成员集结成了一个小分队project。第一位这是全面ACE的大姐成员权宝儿(BoA),出道二十年,在日本单人销量过千万,韩国国内200...

韩国女团 aespa 首场 VR 演唱会或暗示 Quest 3 将于 10 月推出

AmazeVR宣布将在十月份举办一场现场VR音乐会,观众将佩戴MetaQuest3进行体验。韩国女团aespa于2020年11月出道,此后在日本推出了三张金唱片,在韩国推出了...

韩网热议!女团aespa成员Giselle在长腿爱豆中真的是legend

身高163的Giselle,长腿傲人,身材比例绝了...

假唱而被骂爆的女团:IVE、NewJeans、aespa上榜

在韩国,其实K-pop偶像并不被认为是真正的歌手,因为偶像们必须兼备舞蹈能力、也经常透过对嘴来完成舞台。由于科技的日渐发达,也有许多网友会利用消音软体来验证K-pop偶像到底有没有开麦唱歌,导致假唱这...

新女团Aespa登时尚大片 四个少女四种style

来源:环球网

韩国女团aespa新歌MV曝光 画面梦幻造型超美

12月20日,韩国女团aespa翻唱曲《DreamsComeTrue》MV公开,视频中,她们的造型超美!WINTER背后长出一双梦幻般的翅膀。柳智敏笑容甜美。宁艺卓皮肤白皙。GISELLE五官精致...

女网友向拳头维权,自称是萨勒芬妮的原型?某韩国女团抄袭KDA

女英雄萨勒芬妮(Seraphine)是拳头在2020年推出的第五位新英雄,在还没有正式上线时就备受lsp玩家的关注,因为她实在是太可爱了。和其他新英雄不同的是,萨勒芬妮在没上线时就被拳头当成虚拟偶像来...

人气TOP女团是?INS粉丝数见分晓;TWICE成员为何在演唱会落泪?

现在的人气TOP女团是?INS粉丝数见分晓!现在爱豆和粉丝之间的交流方法变得多种多样,但是Instagram依然是主要的交流手段。很多粉丝根据粉丝数评价偶像的人气,拥有数百、数千万粉丝的组合作为全球偶...

韩国女团MVaespa Drama MV_韩国女团穿超短裙子跳舞

WelcometoDrama.Pleasefollow4ruleswhilewatchingtheDrama.·1)Lookbackimmediatelywhenyoufe...

aespa师妹团今年将出道! SM职员亲口曝「新女团风格、人数」

记者刘宛欣/综合报导南韩造星工厂SM娱乐曾打造出东方神起、SUPERJUNIOR、少女时代、SHINee、EXO等传奇团体,近年推出的aespa、RIIZE更是双双成为新生代一线团体,深受大众与粉丝...

南韩最活跃的女团aespa,新专辑《Girls》即将发布,盘点昔日经典

女团aespa歌曲盘点,新专辑《Girls》即将发布,期待大火。明天也就是2022年的7月8号,aespa新专辑《Girls》即将发行。这是继首张专辑《Savage》之后,时隔19个月的第二张专辑,这...

章泽天女团aespa出席戛纳晚宴 宋康昊携新片亮相

搜狐娱乐讯(山今/文玄反影/图科明/视频)法国时间5月23日晚,女团aespa、宋康昊、章泽天等明星亮相戛纳晚宴。章泽天身姿优越。章泽天肩颈线优越。章泽天双臂纤细。章泽天仪态端正。女团aespa亮...

Aespa舞台暴露身高比例,宁艺卓脸大,柳智敏有“TOP”相

作为SM公司最新女团aespa,初舞台《BlackMamba》公开,在初舞台里,看得出来SM公司是下了大功夫的,虽然之前SM公司新出的女团都有很长的先导片,但是aespa显然是有“特殊待遇”。运用了...

AESPA女团成员柳智敏karina大美女

真队内速度最快最火达成队内首个且唯一两百万点赞五代男女团中输断层第一(图转自微博)...

对来学校演出的女团成员语言性骚扰?韩国这所男高的学生恶心透了

哕了……本月4日,景福男子高中相关人士称已经找到了在SNS中上传对aespa成员进行性骚扰文章的学生,并开始着手调查。2日,SM娱乐创始人李秀满的母校——景福高中迎来了建校101周年庆典活动。当天,S...