Closed5

Svelteを触ってみる

mktbshmktbsh

画像ファイルのインポート

下記でいけるかと思ったら無理だった。

import icon from './assets/icon.png'

<ImageComponent src={icon} />

解決

  • 静的な画像ファイルはpublicディレクトリに置く
<ImageComponent src={'/assets/icon.png'}
mktbshmktbsh

UMD形式しかないパッケージを使いたい時

やったこと

index.html
<head>
  <script src="https://unpkg.com/myscript/myscript.min.js"></script>
</head>
@types/window.d.ts
interface Window {
  myscript: any;
}

でもこれだと結局、↓みたいなことをする必要があって微妙

const myscript = window.myscript;
const foo = new myscript('foo');

解決?策

context="module"が使えそう(https://svelte.jp/docs#script_context_module)

App.svelteで定義。

App.svelte
<script context="module">
  export const myscript = window.myscript;
</script>

使う側

Example.svelte
<script lang="ts">
  import { myscript } from '../App.svelte'

  const foo = new myscript('foo');
</script>

《2021/06/22 追記》
当然だよなぁって感じのWarning...

(!) Circular dependency
src/App.svelte -> src/components/Example.svelte -> src/App.svelte

他にもっといい方法があったら教えてください。

mktbshmktbsh

結局、Circular dependencyの問題は切り分けることで解決した。

mktbshmktbsh

解決前

Circular dependency

App.svelte
<script lang="ts"  context="module">
  export const myscript = window.myscript;
</script>

<script>
// Do something
</script>

子要素

Child.svelte
<script lang="ts">
  import { myscript } from './App.svelte';

  // Do something with myscript
</script>

解決

新規にsrc配下に modules ディレクトリを作成し、そこにmoduleを切り出す。

modules/Modules.svelte
<script lang="ts" context="module">
  export const myscript = window.myscript;
 // ここに追加していく。
</script>
Child.svelte
<script lang="ts">
  import { myscript } from './modules/Modules.svelte';

  // Do something with myscript
</script>
このスクラップは2021/07/07にクローズされました