diff --git a/files/zh-cn/learn/tools_and_testing/client-side_javascript_frameworks/svelte_getting_started/index.md b/files/zh-cn/learn/tools_and_testing/client-side_javascript_frameworks/svelte_getting_started/index.md new file mode 100644 index 00000000000000..59ea2702d3ce97 --- /dev/null +++ b/files/zh-cn/learn/tools_and_testing/client-side_javascript_frameworks/svelte_getting_started/index.md @@ -0,0 +1,505 @@ +--- +title: Svelte 入门 +slug: Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_getting_started +--- + +{{LearnSidebar}} +{{PreviousMenuNext("Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_resources","Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_todo_list_beginning", "Learn/Tools_and_testing/Client-side_JavaScript_frameworks")}} + +此篇文章我们将简要介绍 [Svelte 框架](https://svelte.dev/)。我们将会学习 Svelte 如何运作,以及它与其它框架和工具的不同之处。接着我们将学习如何设置我们的开发环境并建立一个示例应用程序,了解其项目结构及如何在本地运行,最后可以将其构建于生产环境。 + + + + + + + + + + + + +
前提: +

+ 推荐你至少需熟悉基本的 + HTMLCSS 与 + JavaScript + 等程序语言且具备终端/命令行基本知识。 +

+

+ Svelte 为一个编译程序,从我们的源代码去产生出最小且高度优化的 JavaScript 程序代码;你需要一个安装了 node 和 npm 的终端来编译和构建你的应用程序。 +

+
目标: + 设置 Svelte 本地开发环境,建立初始应用程序并了解 Svelte 基本运作方式。 +
+ +## Svelte:建构丰富用户界面的新方式 + +与此模块中介绍的其它框架相比,Svelte 提供了建构 web 应用程序的不同的方式。应用程序运行时,像 React 和 Vue 等框架会在使用者的浏览器做一大堆工作,而 Svelte 则是将做的这些事移到编译阶段处理,因此那些要做的事情只会发生在你构建应用程序的时候,进而能产生高度优化的原生 JavaScript 程序代码。 + +这种方式产生的结果并不只是将应用程序的包最小化及取得最佳性能。对于现代的生态环境拥有较少技术经验的人,也可以通过 Svelte 取得更好的开发体验。 + +Svelte 更贴近传统的 Web 开发模型(HTML、CSS、JS),它只是对 HTML 和 JavaScript 增加了一点扩展。与其它框架相比,可以说只有一点点概念和工具需要学习。 + +现阶段的缺点是它目前仍在发展中——和其它成熟框架相比,它的生态环境较受到了工具、支持、插件、使用模式等等限制,工作机会也比较少。但它的优点应该足够让你感兴趣并去探索它。 + +> **备注:** Svelte 具有[官方的 TypeScript 支持](https://svelte.dev/docs/typescript)。我们将在之后的教学系列中讲到它。 + +我们鼓励你完成 [Svelte 教程](https://learn.svelte.dev/)来快速了解基本的概念,然后再回到此教学系列来学习如何建构一些更深入的东西。 + +## 使用案例 + +Svelte 可以被用来开发一小块界面或整个应用程序。你也可以从头开始来让 Svelte 驱动你的用户界面或将它渐进地整合至已存在的应用程序。 + +不过 Svelte 特别适合处理下列几种情况: + +- 让 web 应用程序更适用于低功耗设备:使用 Svelte 建构的应用程序将拥有较小的捆绑包(bundle)大小,特别适用于网络连接缓慢和处理能力有限的设备。因为程序代码较少,所以需要下载、解析、执行并保存于内存中的字节数也较少。 +- 可应付需频繁交互的页面或复杂的可视化需求:比如你建构一个数据可视化应用程序,你可能会需要显示大量的 DOM 元素,从该框架就能获得较好的性能增益,因为它不会有运行时的开销,可以确保使用者的互动更快速与实时。 +- 具备基本的 Web 开发知识即可:Svelte 学习曲线不高。Web 开发人员具备基本的 HTML、CSS、JavaScript 知识就能在短时间简单地掌握 Svelte 的要点并开始构建 Web 应用程序。 + +Svelte 团队推出了 [SvelteKit](https://kit.svelte.dev),这是一个使用 Svelte 构建 Web 应用程序的框架。它包含了现代 Web 框架的特性,如基于文件系统的路由、服务器端渲染(SSR)、页面特定的渲染模式、离线支持等。关于 SvelteKit 的更多信息,可以参考[官方教程](https://learn.svelte.dev)和[文档](https://kit.svelte.dev/docs)。 + +> **备注:** 作为构建 Web 应用的推荐 Svelte 框架,SvelteKit 旨在取代 [Sapper](https://sapper.svelte.dev/)。 + +Svelte 也可以通过 [Svelte Native](https://svelte-native.technology) 用于移动开发。 + +## Svelte 如何工作? + +作为一个编译程序,Svelte 能扩展 HTML、CSS、JavaScript,产生最佳的 JavaScript 程序代码而不会有任何运行时开销。为了达成这个目的,Svelte 通过下列方法来扩展其原生 web 技术: + +- 扩展 HTML:允许在标记中使用 JavaScript 表达式并提供了一些指令来使用条件和循环,做法和 handlebars 相似。 +- 扩展 CSS:添加作用域机制,并允许每个组件定义自己的样式(不会因为其它组件的样式改变而被影响)。 +- 扩展 JavaScript:重新解释一些特定指令来达到真实的响应式并减轻组件状态管理的复杂度。 + +只有在非常特殊的情况和 Svelte 组件的上下文中编译程序才会介入。其中对 JavaScript 的扩展也相对比较少且谨慎,就是为了不破坏 JavaScript 的语法,而使开发人员觉得困惑。事实上,你大部分时间还是会用到原生 JavaScript 来开发。 + +## Svelte 第一步 + +既然 Svelte 是一个编译程序,你不能只是把 ` + + + + +``` + +> **备注:** 有关组件格式的更多信息,请查看 [Svelte 组件文档](https://svelte.dev/docs/svelte-components)。 + +接着我们来看入门模板中的 `src/App.svelte` 文件,你应该会看到以下内容: + +```html + + +
+

Hello {name}!

+

+ Visit the Svelte tutorial to learn + how to build Svelte apps. +

+
+ + +``` + +### ` +``` + +Svelte 使用 [`export`](/zh-CN/docs/Web/JavaScript/Reference/Statements/export) 关键字将变量声明为属性,代表这个属性可以被组件的使用者(例如,其它组件)访问。这是 Svelte 扩展 JavaScript 语法使其更有用且使用上如同以往的其中一个例子。 + +### 标记部分 + +在标记部分,你可以插入任何 HTML,另外你也可以在一对大括号(`{}`)中插入有效的 JavaScript 表达式。此例中我们在 `Hello` 文本之后嵌入 `name` 属性值。 + +```html +
+

Hello {name}!

+

+ Visit the Svelte tutorial to learn + how to build Svelte apps. +

+
+``` + +Svelte 也支持一些标签,像是 `{#if...}`、`{#each...}` 和 `{#await...}`——分别允许你可以条件式地渲染标记中的一部分、迭代列表元素和处理异步值。 + +### ` +``` + +我们现在对 [`

`](/zh-CN/docs/Web/HTML/Element/Heading_Elements) 元素应用了一些样式。这对其它组件中的 `

` 元素们将会有什么影响呢? + +在 Svelte 中,组件 `