かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

Svelte TypeScript ファイルを .svelte テンプレートでインポートしたらエラーになった

Svelte 公式の TypeScript 化したプロジェクトで、.svelte テンプレート内で自作の TypeScript ファイルをインポートしたらコンパイルエラーになってしまいました。

Svelte の TypeScript 化

公式のテンプレート README に書かれているスクリプトを実行しただけ

$ npx degit sveltejs/template svelte-app
cd svelte-app
$ node scripts/setupTypeScript.js

環境

"svelte": "^3.0.0",
"typescript": "^4.0.0",
"rollup": "^2.3.4",

.svelte テンプレート内で .ts ファイルをインポートしたらエラーが発生する

// /src/Component.svelte
<script lang="ts">
import { myScript } from './myScript';
</script>

=> [!] Error: Unexpected token (Note that you need plugins to import files that are not JavaScript)

rollup の TypeScript の設定に rootDir を指定すれば OK

rollup.configplugin.typescriptrootDir.ts ファイルのある場所を指定してあげれば解決しました。

  plugins: [
    // …
    typescript({
      sourceMap: !production,
      inlineSources: !production,
+     rootDir: "./src",
    }),

自分のプロジェクトでは .ts ファイルも /src 内に配置していたので rootDir: './src' と指定しています。
設定を保存すると自動的に再ビルドされエラーが消え問題なく .svelte ファイル内で TypeScript のモジュールが使えるようになりました。

おわり

stackoverflow では新しいバージョンでは修正されているのように書かれていたのですが、この方法で解決することが出来ました。Svelte template で使われている rollup のバージョンの関係?
rollup のことは詳しく解っていないので、なぜこれで解決するのかまでは調べられていません。あしからず :pray:


[参考]