はじめに
Svelte+SvelteKit の環境がコマンド 1 つで構築できるので、その構成を軽く見てみようと思います
Web フレームワークのSvelteKitはSapperの後継で将来的にこちらに置き換わります
この記事の@sveltejs/kit
のバージョンは1.0.0-next.151
です
まだ β 版です
セットアップ
npm init svelte@next Project-name
インタラクティブに環境をセットアップできる
以下を選択
- Which Svelte app template?
- SvelteKit demo app
- Use TypeScript?
- Yes
- Add ESLint for code linting?
- Yes
- Add Prettier for code formatting?
- Yes
設定周りで気になった点
.prettierrc
は最初に自分用の設定に変えておく- package.json に
"type": "module"
が設定してある- これはスコープ内の JS ファイルを ES Modules(import/export)として扱う
- この設定の影響を受けるのは
svelte.config.js
で、試しに"type": "commonjs"
とかにすると、この config が動かない - また、
.eslintrc.js
も影響を受けてて、こちらは ESM として扱うと動かないので、拡張子を変えて.eslintrc.cjs
で CJS 化されている - JS ファイルは書かない想定なので、
"type": "module"
を削除して、svelte.config.mjs
にしようかと試したが、node_modules/@sveltejs/kit/dist/cli.js
でsvelte.config.js
という名前で読み込んでいるので、それもできなかった
- TypeScript を動かすにはプリプロセッサが必要
svelte-preprocess
というパッケージで公開されていて、これがsvelte.config.js
で設定されている
svelte.config.js
のkit: { target: '#svelte' }
の設定- これは SSR された HTML を
<div id="svelte">
に hydrate する設定、OFF にすることは無さそう
- これは SSR された HTML を
- TODO デモアプリ(
/todos
)で追加・削除したデータが永続化されている - ビルドが速すぎだった
- ビルドツールに Vite を使ってる
追加した設定
- ESLint に
eslint-config-airbnb-base
のルールを追加した
コマンド
- dev(
svelte-kit dev
).svelte-kit/dev
にビルド結果が出力される- 同時にサーバーを立ち上げる
- HMR で開発できる
- build(
svelte-kit build
)- 本番用ビルド
svelte.config.js
で adapter を指定し、デプロイ環境にあわせてビルド結果を切り替えることができる- 特定環境の adapter(
adapter-netlify
やadapter-vercel
など)もあり、自作することも可能(NPM レジストリに色んな adapter が公開されている)- この仕組みはいいなって思った
- とりあえず
@sveltejs/adapter-static
を使うことにしたが、npm i -D @sveltejs/adapter-static@next
にしないとエラーで動かなかった(β 版なのであまり参考にならないが)- 結果は
/build
ディレクトリに出力される - ちゃんと静的ビルドされてるっぽかった
- 結果は
- preview(
svelte-kit preview
)svelte-kit build
の結果を表示できる- 本番ビルドの結果をローカルで確認する用
- 注意点として、
/build
ではなく、.svelte-kit/output
の方を参照してるので、adapter でビルドされた結果は見ていない
- check(
svelte-check
)- 未使用 CSS、A11y、TS 型チェックを行う
- Lint やフォーマッターと一緒に CI で走らすと良さそう
ここまでのsvelte.config.js
は以下
import adapter from '@sveltejs/adapter-static' import preprocess from 'svelte-preprocess' /** @type {import('@sveltejs/kit').Config} */ const config = { preprocess: preprocess(), kit: { adapter: adapter(), target: '#svelte' } } export default config
コード(src
配下)
SvelteKit のディレクトリ構成はsvelte.config.js
の files プロパティで定義されており、以下のドキュメントにデフォルト値が書いてある
https://kit.svelte.dev/docs#configuration
- hooks(
src/hooks
) - lib(
src/lib
) - routes(
src/routes
) - serviceWorker(
src/service-worker
)- ここに SW を置けば Vite が自動で登録してくれる
- template(
src/app.html
)- テンプレート
このデモアプリのコード色々やってて、勉強になる