Svelte + TypeScript + SCSS やってみる

公式で TypeScript サポートがアナウンスされていたので、ようやく Svelte を触る。

目次

Svelte プロジェクトを作る

以下の TypeScript サポートのアナウンス記事に従って始めてみる。

$ npx degit sveltejs/template practice-svelte
$ cd practice-svelte/

degit という Scaffolding をサポートするパッケージを利用しているみたい。GitHub のユーザ名・リポジトリ名、ブランチ名なんかを指定して、npm init (create-)react-app 的なことができるようだ。

Git 管理したかったのでとりあえず以下を入れておく。

$ git init
$ git commit --allow-empty -m 'Init'
$ git remote add origin https://github.com/Neos21/practice-svelte.git
$ git push

TypeScript を扱えるようにする

Svelte はデフォルトでは JavaScript で書けるモノだが、TypeScript でも書けるようになった。めっちゃお手製感のあるスクリプトでプロジェクトを TypeScript 化する。

$ node scripts/setupTypeScript.js

コレだけ。.svelte ファイル内では

と書けば TypeScript として認識してくれるようになる。

SCSS を扱えるようにする

Svelte で SCSS を扱えるようにするには、svelte-preprocesssass パッケージを入れて、rollup.config.js を軽く修正する必要がある。

ただ、先程の TS 化スクリプトで svelte-preprocess パッケージと rollup.config.js の設定が入ったので、やることは sass のインストールだけで良い。

# node-sass を入れても良い
$ npm i -D sass

手作業で追加する場合は rollup.config.js に以下のように指定するだけで良いっぽい。この辺、バージョンによって仕様がコロコロ変わってるくさい。

import svelte from 'rollup-plugin-svelte';
import sveltePreprocess from 'svelte-preprocess';

export default {
  plugins: [
    svelte({
      preprocess: sveltePreprocess()
    })
  ]
};

.svelte の方は、<style lang="scss">lang 属性を追加すれば OK。Svelte は何もしないと <style> の内容がスコープ化される。逆に Global に適用するには一工夫必要っぽい。

VSCode 拡張機能を入れる

シンタックスハイライトなどを効かせて開発効率を上げるため、Svelte for VS Code svelte.svelte-vscode を入れておく。

sass を入れたあたりでエラーが出るかもしれないが、VSCode を再起動すれば解消する。エラー解消のために svelte.config.js をどうこう、みたいな記事もみかけたが、自分は再起動だけでうまくいった。

成果物はコチラ

ココまで試してみた内容は以下にアップした。

GitHub Pages で動くように、public/index.html の記述を相対パスに変更して、GitHub Actions を使って自動デプロイされるようにした。

以上。

実際のフロントエンドアプリの開発に Svelte がどれくらい使えるのか、もう少し使い込んでみよう。