越写悦快乐之如何快速开启一个Svelte项目

Svelte项目 - 图片来自我的手机

今天的越写悦快乐之系列文章为大家带来如何快速开启一个Svelte项目,如何利用HTML、JavaScript和CSS构建Web应用。话说当下流行的Web开源的JavaScript框架当属React、Vue.js和Angular,那么除了这三款框架外,我们别无选择了吗?今天为大家介绍这款框架Svelte,就是其中很有名气的一员,我相信通过的介绍,你会有兴趣进一步了解它,让我们开始探索之旅吧。

介绍

它是什么

Svelte is a new way to build web applications. It's a compiler that takes your declarative components and converts them into efficient JavaScript that surgically updates the DOM.

Svelte是一款构建Web应用的新方式,通过它可以将声明式组件高效地编译成JavaScript,并且如外科手术般地更新DOM。

它有什么特点

  • 减少代码量
  • 无需操作虚拟DOM
  • 无需使用状态管理

如何使用

环境要求

  • Node 8.0
  • JavaScript 或者TypeScript
  • VSCode

开启一个新项目

创建项目

我们打开iterm2软件,然后定位到Desktop目录下,执行如下命令:

npx degit sveltejs/template svelte-go

执行完成后切换到svelte-go并使用VSCode打开项目:

cd svelte-go
code -r .

切换编程语言

打开项目后,我们注意到项目的结果如下:

项目结构 - 图片来自我的手机

切换到VSCode的终端页签下,执行以下命令:

node scripts/setupTypeScript.js

执行完成后会自动删除scripts目录。

来个满天星玩玩

打开App.svelte文件,输入以下内容:

<script>
    import { onMount } from 'svelte';

    let characters = ['🥳', '🎉', '✨'];

    let confetti = new Array(100).fill()
        .map((_, i) => {
            return {
                character: characters[i % characters.length],
                x: Math.random() * 100,
                y: -20 - Math.random() * 100,
                r: 0.1 + Math.random() * 1
            };
        })
        .sort((a, b) => a.r - b.r);

    onMount(() => {
        let frame;

        function loop() {
            frame = requestAnimationFrame(loop);

            confetti = confetti.map(emoji => {
                emoji.y += 0.7 * emoji.r;
                if (emoji.y > 120) emoji.y = -20;
                return emoji;
            });
        }

        loop();

        return () => cancelAnimationFrame(frame);
    });
</script>

<style>
    :global(body) {
        overflow: hidden;
    }

    span {
        position: absolute;
        font-size: 5vw;
    }
</style>

{#each confetti as c}
    <span style="left: {c.x}%; top: {c.y}%; transform: scale({c.r})">{c.character}</span>
{/each}

随后在main.ts文件中加载App.svelte文件并绑定组件,文件内容如下:

import App from "./App.svelte";

const app = new App({
  target: document.body,
});

export default app;

配置文件

我们打开项目的package.json文件看看,就知道这个项目依赖哪些第三方库了,文件内容如下:

{
  "name": "svelte-app",
  "version": "1.0.0",
  "license": "MIT",
  "scripts": {
    "build": "rollup -c",
    "dev": "rollup -c -w",
    "start": "sirv public",
    "validate": "svelte-check"
  },
  "devDependencies": {
    "@rollup/plugin-commonjs": "^16.0.0",
    "@rollup/plugin-node-resolve": "^10.0.0",
    "rollup": "^2.3.4",
    "rollup-plugin-css-only": "^3.1.0",
    "rollup-plugin-livereload": "^2.0.0",
    "rollup-plugin-svelte": "^7.0.0",
    "rollup-plugin-terser": "^7.0.0",
    "svelte": "^3.0.0",
    "svelte-check": "^1.0.0",
    "svelte-preprocess": "^4.0.0",
    "@rollup/plugin-typescript": "^6.0.0",
    "typescript": "^3.9.3",
    "tslib": "^2.0.0",
    "@tsconfig/svelte": "^1.0.0"
  },
  "dependencies": {
    "sirv-cli": "^1.0.0"
  }
}

看看效果

在项目的终端执行以下命令即可查看项目运行结果:

npm run start
运行结果

如果您阅读过Svelte的官方教程,或许对这一结果不意外,我相信您能静下心来阅读官方的教程,这样有助于你进一步理解Svelte是怎么工作的。

参考

Gif制作工具

个人总结及收获

我们的这篇文章入门了如何使用Svelte构建可交互基于组件的页面,该页面增强了HTML的内容表达的能力,更让我们可以借助JavaScript或者TypeScript来提升我们的开发体验,构建更加友好卓越的用户体验,提升用户的产品价值,我相信技术带来生产的变革,让我们一起构建无与伦比的用户体验,创造更大的价值。若是我的文章对你有所启发,那将是我莫大的荣幸。希望和您一起精进,成为更好的自己。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,825评论 4 377
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,887评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,425评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,801评论 0 224
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,252评论 3 299
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,089评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,216评论 2 322
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 31,005评论 0 215
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,747评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,883评论 2 255
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,354评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,694评论 3 265
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,406评论 3 246
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,222评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,996评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,242评论 2 287
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 36,017评论 2 281

推荐阅读更多精彩内容