Open KATO-Hiro opened 1 month ago
%sveltekit.head%
をコメントアウトしないと、以下のエラーが発生%sveltekit.body%
がプレースホルダーではなく、単なる文字列として処理されている[ Farm ] Error: Parse `src/app.html` failed.
Error: Parse `src/app.html` failed.
Error: × Stray end tag "head"
╭─[src/app.html:8:1]
5 │ <link rel="icon" href="%sveltekit.assets%/favicon.png" />
6 │ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7 │ %sveltekit.head%
8 │ </head>
· ───────
9 │ <body data-sveltekit-preload-data="hover" class="bg-white dark:bg-gray-800">
10 │ <div style="display: contents">%sveltekit.body%</div>
11 │ </body>
╰────
× Start tag "body" seen but an element of the same type was already open
╭─[src/app.html:9:1]
6 │ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7 │ %sveltekit.head%
8 │ </head>
9 │ <body data-sveltekit-preload-data="hover" class="bg-white dark:bg-gray-800">
· ────────────────────────────────────────────────────────────────────────────
10 │ <div style="display: contents">%sveltekit.body%</div>
11 │ </body>
12 │ </html>
╰────
Potential Causes:
1.The module have syntax error.
2.This kind of module is not supported, you may need plugins to support it
Potential Causes:
1.The module have syntax error.
2.This kind of module is not supported, you may need plugins to support it
Farm
これまでのツールよりも高速
dev、prodで一貫した環境
既存のツールとの互換性がある
懸念事項
Svelte、SvelteKitに対応しているか?
移行が簡単か?
https://github.com/farm-fe/farm/tree/main/examples/vite-adapter-svelte
https://github.com/sveltejs/kit/blob/main/packages/kit/src/exports/vite/dev/index.js
esbuild
Parcel
Rspack
SvelteKitアプリでビルド速度を向上させるための方法
Viteは依存関係を事前にバンドルすることでビルド速度を向上させます。optimizeDeps
オプションを使用して、依存関係の事前バンドルを設定します。
// vite.config.js
import { defineConfig } from 'vite';
import { sveltekit } from '@sveltejs/kit/vite';
export default defineConfig({
plugins: [sveltekit()],
optimizeDeps: {
include: ['some-large-dependency'],
exclude: ['some-unnecessary-dependency']
}
});
Viteはデフォルトでキャッシュを利用しますが、キャッシュの設定を見直すことでビルド速度を向上させることができます。
// vite.config.js
import { defineConfig } from 'vite';
import { sveltekit } from '@sveltejs/kit/vite';
export default defineConfig({
plugins: [sveltekit()],
cacheDir: 'node_modules/.vite_cache'
});
コードスプリッティングを使用して、アプリケーションを複数のチャンクに分割することで、初期ロード時間を短縮できます。
// vite.config.js
import { defineConfig } from 'vite';
import { sveltekit } from '@sveltejs/kit/vite';
export default defineConfig({
plugins: [sveltekit()],
build: {
rollupOptions: {
output: {
manualChunks: {
vendor: ['some-large-dependency']
}
}
}
}
});
開発サーバーの設定を見直すことで、パフォーマンスを向上させることができます。
// vite.config.js
import { defineConfig } from 'vite';
import { sveltekit } from '@sveltejs/kit/vite';
export default defineConfig({
plugins: [sveltekit()],
server: {
fs: {
strict: true
},
watch: {
usePolling: true,
interval: 100
}
}
});
不要なプラグインを削除したり、プラグインの設定を見直すことでビルド速度を向上させることができます。
HMRの設定を見直すことで、開発中のビルド速度を向上させることができます。
// vite.config.js
import { defineConfig } from 'vite';
import { sveltekit } from '@sveltejs/kit/vite';
export default defineConfig({
plugins: [sveltekit()],
server: {
hmr: {
overlay: false
}
}
});
依存関係を最新バージョンにアップデートすることで、パフォーマンスが向上する場合があります。
npm update
Viteは内部でEsbuildを使用していますが、設定を見直すことでさらにパフォーマンスを向上させることができます。
// vite.config.js
import { defineConfig } from 'vite';
import { sveltekit } from '@sveltejs/kit/vite';
export default defineConfig({
plugins: [sveltekit()],
esbuild: {
target: 'esnext',
minify: true
}
});
ファイルの監視設定を見直すことで、リロードのパフォーマンスを向上させることができます。
// vite.config.js
import { defineConfig } from 'vite';
import { sveltekit } from '@sveltejs/kit/vite';
export default defineConfig({
plugins: [sveltekit()],
server: {
watch: {
ignored: ['**/node_modules/**', '**/.git/**']
}
}
});
大きなモジュールを小さなモジュールに分割することで、ビルド時間を短縮できます。これにより、変更があった部分だけを再ビルドすることができます。
SSRを使用する場合、設定を見直すことでビルド速度を向上させることができます。
// svelte.config.js
import adapter from '@sveltejs/adapter-node';
import preprocess from 'svelte-preprocess';
export default {
preprocess: preprocess(),
kit: {
adapter: adapter(),
target: '#svelte',
ssr: {
noExternal: ['some-large-dependency']
}
}
};
SvelteKitアプリのビルド速度を向上させるためには、依存関係の最適化、キャッシュの利用、コードスプリッティング、開発サーバーの設定、プラグインの最適化、HMRの設定、依存関係のアップデート、Esbuildの利用、ファイルの監視設定、モジュールの分割、SSRの設定など、さまざまな方法があります。これらの対策を組み合わせることで、ビルド速度を大幅に改善することができます。
SvelteKitアプリでViteを利用している場合に、画面のリロードが遅くなる一般的な原因と対策。
大量のコンポーネント
依存関係の多さ
Viteの設定
Viteのキャッシュを有効にする
依存関係の最適化
Viteの設定を最適化する
vite.config.js
ファイルを最適化します。以下に例を示します。import { defineConfig } from 'vite';
import svelte from '@sveltejs/vite-plugin-svelte';
export default defineConfig({
plugins: [svelte()],
optimizeDeps: {
include: ['some-large-dependency'],
exclude: ['some-unnecessary-dependency']
},
build: {
sourcemap: false, // ソースマップを無効にすることでビルド時間を短縮
minify: 'esbuild', // esbuildを使用してビルドを高速化
target: 'esnext' // 最新のJavaScript仕様をターゲットにする
},
server: {
hmr: {
overlay: false // HMRのオーバーレイを無効にする
}
}
});
tsconfig.json
ファイルを最適化します。以下に例を示します。{
"extends": "./.svelte-kit/tsconfig.json",
"compilerOptions": {
"allowJs": true,
"checkJs": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"incremental": true,
"isolatedModules": true,
"moduleResolution": "bundler",
"outDir": "build",
"resolveJsonModule": true,
"skipLibCheck": true,
"sourceMap": false, // ソースマップを無効にする
"strict": true
},
"include": ["src/**/*.d.ts", "src/*", "src/**/*.ts", "src/**/*.svelte"],
"exclude": ["node_modules"]
}
ホットモジュールリプレースメント(HMR)の最適化
依存関係のバンドル
これらの対策を実施することで、SvelteKitアプリのビルドやリロード時間を短縮し、開発体験を向上させることができます。まずは、ViteとTypeScriptの設定を見直し、不要な依存関係を削除することから始めると良いでしょう。
Background
WHAT
See
https://vitejs.dev/guide/performance