Routify使ってMarkdownをHTMLページとして表示した使用感
前置き
使用感...他のルータより良いけど、ドキュメントがいまいち...
そんな感じでした、インテリセンスも効かないのできつかった
最後まで作りきれなかったので、途中までの道筋にどうぞ
環境
Node v 16.4.0
vite 2.3.8
初期設定
Svelteに入門するで作成したviteのプロジェクトの続きで作っています
@sveltech/routify
は前のバージョンのものなので
@roxi/routify
を入れる
yarn add -D @roxi/routify routify-plugin-frontmatter mdsvex
routify-plugin-front-matter
はmarkdownの---で囲んだメタ要素を読み込むプラグインmdsvex
はMarkdownを読み込むため
package.json
package.json
にroutifyの設定を加えてscriptを書き換える
{
"scripts": {
"dev": "routify -c vite",
...
},
...
"devDependencies": {
...
},
"routify": {
"base": "/",
"pages": "./src/pages",
"dynamicImports": true,
"rootDir": ".routify",
"extensions": [
"md",
"svx",
"svelte"
],
"plugins": {
"routify-plugin-frontmatter": {}
}
},
}
base
は書いても効かなかった...からconfigファイルできたときに書き直したpages
は読み込むページになるファイルのルートディレクトリdynamicImports
は動的に加えたかったのでtruerootDir
はroutes.jsとかconfig.jsとかurlIndex.jsonとか書き出されるディレクトリで基本は触らないけどconfigが設定できなかったところは手動で直せそうextensions
は名前の通り読み込む拡張子 markdown読み込むからmdとsvxを加えてるplugins
のroutify-plugin-front-matterはマークダウンのメタ要素を読む用
vite.config.js
svelte.config.jsと統合した
import { defineConfig } from 'vite'
import { svelte } from '@sveltejs/vite-plugin-svelte'
import { mdsvex } from "mdsvex";
import sveltePreprocess from 'svelte-preprocess'
// https://vitejs.dev/config/
export default defineConfig({
optimizeDeps: {
exclude: ["@roxi/routify"]
},
plugins: [
svelte({
extensions: [".md", ".svx", ".svelte"],
preprocess: [
mdsvex({
extension: "md",
}),
sveltePreprocess({
extension: [".svelte", ".md"],
}),
],
}),
]
})
Routerの設定
src/App.vue
を開いて
<script lang="ts">
import { Router } from '@roxi/routify';
import { routes } from '../.routify/routes';
</script>
<main>
<Router {routes} />
</main>
ページ作成
src/pages
ディレクトリを作成してsample.mdを入れる
---
title: サンプル
author: meko
---
## Title
src/pages
にindex.svelteを作成
<main>
Home
</main>
起動
yarn dev
これでrootディレクトリに.routify
ディレクトリができるはず
localhost:3000を開くとHomeが見られて、localhost:3000/sampleでマークダウンがhtmlに変換されたページが開ける
おまけ
レイアウト
src/pages
ディレクトリに_layout.svelte
を作成する
<header>Header</header>
<div class="type-post">
<article>
{#if meta && title}
<h1>{ title }</h1>
{/if}
<slot />
</article>
</div>
<footer>Copyright ©︎ meko All Right Reserved</footer>
これをpostだけに設定したいならsrc/pages/post
に_layout.svelte
ファイルを作成する pagesに入っているとindex.svelte(ページのトップ?)にも反映されちゃう
404ページ
src/pages
に_fallback.svelte
を作成する
<script lang="ts">
import { goto, url } from "@roxi/routify";
setTimeout(function() {
$goto($url("/"));
}, 500);
</script>
<main>
404 Not Found
</main>
リダイレクトさせてみたgoto使いたかったから
headに加える
routify関係ないけど
svelteには<svelte:head>
というものがあるのでメタタグとか加えられる
<svelte:head>
<title>Signpost</title>
<meta name="vieport" content="width=device-width,initial-scale=1" />
<link type="text/css" rel="stylesheet" href="/assets/prism.css" />
<script src="/assets/prism.js"></script>
</svelte:head>
好きなもの入れたら良いと思う
画像の読み込み
これもroutify関係ない気がするけど
public
ディレクトリに入れて、public/sample.pngなら
<img src="sample.png" />
まとめ
デメリット
バージョンの話とか知らなかったので遠回りした
ドキュメントのキーワードが検索しにくい
構造が分かりにくい サンプルが少ない
メリット
勝手にファイル拾い上げてくれる
レイアウトが作れる 404ページが設定できる 既存のプロジェクトに入れられる
2日間で何が分かるんだという感じかもですが、簡単な使用感でした
@svelte/kit
と比べてみてどっち使うか考えます
gridsomeのバージョンがNode v15.14.0でsvelte用のバージョンがNode v16.4.0だから切り替えがめんどい
早めに切り替えたいです