ํ”„๋ก ํŠธ์—”๋“œ ์„œ๋ฒ„๋ฅผ ์šด์šฉํ•˜๊ธฐ์œ„ํ•œ ๋„๊ตฌ

https://kit.svelte.dev/docs/adapters

ํ˜ธ์ŠคํŠธ, ํฌํŠธ๋ฒˆํ˜ธ๊ฐ™์€ ์„œ๋ฒ„ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ๋„๊ตฌ์— ๊ด€ํ•œ ๋ฌธ์„œ๋‹ค.
๋…ธ๋“œ์„œ๋ฒ„๋ฅผ ํ™•์žฅ์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด ๋ณด์ธ๋‹ค. (๊ทธ๋ƒฅ sveltekit์—์„œ๋Š” ์†Œ์Šค์†์—์„œ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ ๊ฐ™์•„ ๋ณด์ด์ง€๋งŒ..)

๋น„๋™๊ธฐ ๋‹ค์ด๋‚˜๋ฏน ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ํ•˜๊ธฐ

๊ฐ„๋‹จํžˆ ํ•ด์‹œ ๋ผ์šฐํŠธ๋ฅผ ํ†ตํ•˜์—ฌ ํƒญ์„ ๋งŒ๋“ค๊ณ , ์ฃผ์†Œ๋ฅผ ์ด๋™ํ•˜๋ฉด ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฐ”๊ฟ”์ฃผ๋Š” ๋ถ€๋ถ„์ด ํ•„์š”ํ•˜์—ฌ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ๋‹ค.
์ด๋™ํ•˜๋Š” ์ฃผ์†Œ ๋ชฉ๋ก์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • /#/guide
  • /#/guide/buttons
  • /#/guide/form-elements
  • /#/guide/icon
<!-- guide.svelte -->

<article>
  <h1><a href="/#">HOME</a> / Guide page</h1>
  <Tabs/>
  {#await component}
    <p>...waiting</p>
  {:then comp}
    <svelte:component this={comp}/>
  {:catch err}
    <p>Error page</p>
  {/await}
</article>

<script lang="ts">
import Tabs from './tabs/index.svelte'

let hashArray: string[]
let component: any
const subPages = [
  { type: 'home', component: () => import('./home.svelte') },
  { type: 'icons', component: () => import('./icons.svelte') },
  { type: 'buttons', component: () => import('./buttons.svelte') },
  { type: 'form-elements', component: () => import('./form-elements.svelte') },
]

async function render(route: string)
{
  const selectedRoute = subPages.find(o => o.type === route)
  return (await selectedRoute.component() as any).default
}

hashArray = location.hash ? location.hash.replace(/^#\//, '').split('/') : [ 'guide', 'home' ]
component = render(hashArray[1] || 'home')
</script>

์ด๋ ‡๊ฒŒ ๊ธฐ์ดˆ์ ์ธ ๊ตฌ์„ฑ์ •๋„๋งŒ ์ž‘์„ฑํ•ด๋‘”๋‹ค. ์ถœ์ฒ˜๋Š” ์ด๊ณณ์ €๊ณณ..

import๋ฅผ ํ•จ์ˆ˜ ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ

๋‹ค์ด๋‚˜๋ฏน ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ค‘์— ํ•˜๋‚˜

<svelte:component this="{Chatbox}" />

<script>
let Chatbox;

function loadChatbox() {
  import('./ChatBox.svelte').then(res => Chatbox = res.default)
}
</script>

์Šคํƒ€์ผ์‹œํŠธ :global ์‚ฌ์šฉํ•˜๊ธฐ

svelte ๊ธฐ๋ณธ์€ scoped๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. ๊ธ€๋กœ๋ฒŒ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด :global(body) {}๊ฐ™์€ ๋ชจ์Šต์œผ๋กœ ์„ ํƒ์ž๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.
์š”์ฆ˜์€ ์ผ๋ฐ˜ css์—์„œ nesting์„ ์‚ฌ์šฉํ• ๋•Œ ๊ธ€๋กœ๋ฒŒ์—์„œ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

:global(:root) {
  & :global(body) {
    background: white;
  }
}
:global(:root[data-theme=dark]) {
  & :global(body) {
    background: black;
  }
}
@media (prefers-color-scheme: dark) {
  :global(:root:not([data-theme=light])) {
    & :global(body) {
      background: black;
    }
  }
}

๋‹คํฌ๋ชจ๋“œ์— ๊ด€ํ•œ ์…€๋ ‰ํ„ฐ์˜ ๊ตฌ์กฐ๋‹ค.

ํŠน์ • ๋ณ€์ˆ˜๊ฐ€ ์—…๋ฐ์ดํŠธ๋ ๋•Œ๋งˆ๋‹ค ํ•จ์ˆ˜์‹คํ–‰ํ•˜๊ธฐ

$: c, console.log('yes')

์ด๋Ÿฐ ๋ชจ์Šต์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งˆ์น˜ vue์˜ watch๊ฐ™์ด..

์ถœ์ฒ˜: https://stackoverflow.com/a/56987526

slot์„ ๋นˆ ์—˜๋ฆฌ๋จผํŠธ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„๋•Œ..

vue์—์„œ <template #name><span>text</span><em>123</em></template> ์™€ ๊ฐ™์ด ํŠน์ • ์—˜๋ฆฌ๋จผํŠธ๋กœ ๊ฐ์‹ธ์ง€ ์•Š๊ณ  ๋‚ด์šฉ๋ฌผ๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„๋•Œ๊ฐ€ ๋งŽ๋‹ค.
์ด์ „๊นŒ์ง€ ์ฐพ์•„๋ณด๊ณ  ์•ˆ๋˜๋Š”์ค„ ์•Œ์•˜๋Š”๋ฐ ์ž˜ ์ฐพ์•„๋ณด๋‹ˆ <svelte:fragment/>๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์—ˆ๋‹ค.

<Comp>
  <h1 slot="header">Hello</h1>
  <svelte:fragment slot="footer">
    <p>text line</p>
    <p>text line</p>
  </svelte:fragment>
</Comp>

์ถœ์ฒ˜: https://svelte.dev/docs/special-elements#svelte-fragment

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ

์กฐํšŒ์ˆ˜
412
์ข‹์•„์š”
0

1๊ฐœ์˜ ๋Œ“๊ธ€