Open5
Vite + Svelte のプロジェクトに ESLint を導入

Svelte で SPA を作りたいので、SvelteKit ではなく Vite を使ってプロジェクトを作成
pnpm create vite@latest
.../1941697fda6-f51c | +1 +
.../1941697fda6-f51c | Progress: resolved 1, reused 1, downloaded 0, added 1, done
✔ Project name: … vite-project
✔ Select a framework: › Svelte
✔ Select a variant: › TypeScript
Scaffolding project in /Users/tkhs/Desktop/vite-project...
Done. Now run:
cd vite-project
pnpm install
pnpm run dev
参考

Svelte 用の ESLint プラグイン
こちらの User Guide を参考に ESLint のインストール
pnpm install --save-dev eslint eslint-plugin-svelte svelte
WARN GET https://registry.npmjs.org/eslint-plugin-svelte error (EHOSTUNREACH). Will retry in 10 seconds. 2 retries left.
WARN GET https://registry.npmjs.org/eslint error (EHOSTUNREACH). Will retry in 10 seconds. 2 retries left.
WARN GET https://registry.npmjs.org/svelte error (ENOTFOUND). Will retry in 10 seconds. 2 retries left.
WARN GET https://registry.npmjs.org/@sveltejs%2Fvite-plugin-svelte error (ENOTFOUND). Will retry in 10 seconds. 2 retries left.
WARN GET https://registry.npmjs.org/@tsconfig%2Fsvelte error (ENOTFOUND). Will retry in 10 seconds. 2 retries left.
WARN GET https://registry.npmjs.org/svelte-check error (ENOTFOUND). Will retry in 10 seconds. 2 retries left.
WARN GET https://registry.npmjs.org/vite error (ENOTFOUND). Will retry in 10 seconds. 2 retries left.
WARN GET https://registry.npmjs.org/typescript error (ENOTFOUND). Will retry in 10 seconds. 2 retries left.
Packages: +140
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Progress: resolved 182, reused 140, downloaded 0, added 140, done
node_modules/.pnpm/esbuild@0.24.2/node_modules/esbuild: Running postinstall script, done in 343ms
devDependencies:
+ @sveltejs/vite-plugin-svelte 5.0.3
+ @tsconfig/svelte 5.0.4
+ eslint 9.17.0
+ eslint-plugin-svelte 2.46.1
+ svelte 5.16.0
+ svelte-check 4.1.1
+ typescript 5.6.3 (5.7.2 is available)
+ vite 6.0.6
Done in 17s
設定ファイル(eslint.config.js)を作成
import eslintPluginSvelte from 'eslint-plugin-svelte';
export default [
// add more generic rule sets here, such as:
// js.configs.recommended,
...eslintPluginSvelte.configs.recommended,
{
rules: {
// override/add rules settings here, such as:
// 'svelte/rule-name': 'error'
}
}
];
リントを実行するとエラーに...
pnpx eslint src
Oops! Something went wrong! :(
ESLint: 9.17.0
TypeError: eslintPluginSvelte.configs.recommended is not iterable
at file:///Users/tkhs/Desktop/vite-project/eslint.config.js?mtime=1735546220903:5:33
at ModuleJob.run (node:internal/modules/esm/module_job:222:25)
at async ModuleLoader.import (node:internal/modules/esm/loader:316:24)
at async loadConfigFile (/Users/tkhs/Library/Caches/pnpm/dlx/jveffphywx35arzlbb5lymtzpa/19412a5df1b-9988/node_modules/.pnpm/eslint@9.17.0/node_modules/eslint/lib/config/config-loader.js:202:21)
at async ConfigLoader.calculateConfigArray (/Users/tkhs/Library/Caches/pnpm/dlx/jveffphywx35arzlbb5lymtzpa/19412a5df1b-9988/node_modules/.pnpm/eslint@9.17.0/node_modules/eslint/lib/config/config-loader.js:512:32)
at async #calculateConfigArray (/Users/tkhs/Library/Caches/pnpm/dlx/jveffphywx35arzlbb5lymtzpa/19412a5df1b-9988/node_modules/.pnpm/eslint@9.17.0/node_modules/eslint/lib/config/config-loader.js:646:29)
at async entryFilter (/Users/tkhs/Library/Caches/pnpm/dlx/jveffphywx35arzlbb5lymtzpa/19412a5df1b-9988/node_modules/.pnpm/eslint@9.17.0/node_modules/eslint/lib/eslint/eslint-helpers.js:281:33)
at async NodeHfs.<anonymous> (file:///Users/tkhs/Library/Caches/pnpm/dlx/jveffphywx35arzlbb5lymtzpa/19412a5df1b-9988/node_modules/.pnpm/@humanfs+core@0.19.1/node_modules/@humanfs/core/src/hfs.js:574:24)
at async NodeHfs.walk (file:///Users/tkhs/Library/Caches/pnpm/dlx/jveffphywx35arzlbb5lymtzpa/19412a5df1b-9988/node_modules/.pnpm/@humanfs+core@0.19.1/node_modules/@humanfs/core/src/hfs.js:614:3)
at async globSearch (/Users/tkhs/Library/Caches/pnpm/dlx/jveffphywx35arzlbb5lymtzpa/19412a5df1b-9988/node_modules/.pnpm/eslint@9.17.0/node_modules/eslint/lib/eslint/eslint-helpers.js:323:26)

動作環境によって設定ファイルの書き方を変える必要がある
import eslintPluginSvelte from 'eslint-plugin-svelte';
export default [
// add more generic rule sets here, such as:
// js.configs.recommended,
...eslintPluginSvelte.configs['flat/recommended'],
{
rules: {
// override/add rules settings here, such as:
// 'svelte/rule-name': 'error'
}
}
];
詳細は GitHub を参照
再度実行するとエラー解消したが、うまく動いてない模様
2:12 error Parsing error: Unexpected token :
該当ファイル
<script lang="ts">
let count: number = $state(0)
const increment = () => {
count += 1
}
</script>
<button onclick={increment}>
count is {count}
</button>

インテグレーションコマンドを使った方が簡単そう
設定ファイル(eslint.config.js)を削除してコマンド実行
pnpx sv add eslint
┌ Welcome to the Svelte CLI! (v0.6.10)
│
◇ Which package manager do you want to install dependencies with?
│ pnpm
│
◆ Successfully setup add-ons
│
◆ Successfully installed dependencies
│
└ You're all set!
再度実行すると、2:12 error Parsing error: Unexpected token :
が表示されなくなった
リントできているか確認のため不要なコードを追加
let variable = 'test'
再度実行すると、不要な部分を検出できている!
error 'variable' is assigned a value but never used @typescript-eslint/no-unused-vars

VSCode上でコーディング時に表示させたい場合は、.vscode/settings.json に以下を追加
{
"eslint.validate": ["javascript", "javascriptreact", "svelte"]
}
該当箇所に赤波線が!
作成者以外のコメントは許可されていません