Svelte - Router 그리고 Material UI
이제 아래 url 로 들어가면 Menu, Article 을 생성할 수 있는 화면을 대충 만들고자 한다.
- /admin/menu
- /admin/article
일단 svelte - Router 기능을 지원하는 모듈을 설치하자.
구글링을 해보니 svelte-spa-router
, svelte-router-spa
요 두개가 나오더라. 뭔 차이인건지...
뭐 여러 블로그 글을 보니 svelte-spa-router
모듈을 사용하니까 나도 이걸 사용하자.
공식 링크는 여기닷!!
https://github.com/ItalyPaleAle/svelte-spa-router
yarn add svelte-spa-router
명령어로 모듈 설치하고 url 을 정의하는 routes.js
파일을 만들자.
-
/routes/routes.js
import { wrap } from 'svelte-spa-router/wrap' const routes = { '/admin/menu': wrap({ asyncComponent: () => import('../view/main/AdminMenu.svelte') }), '/admin/article': wrap({ asyncComponent: () => import('../view/main/AdminArticle.svelte') }), } export default routes;
물론 당연히 AdminMenu.svelte
, AdminArticle.svelte
파일은 미리 준비해놨고, 일단은 간단히 text 만 출력하는 view 로 만들었다.
이제 svelte-spa-router
, routes.js
를 불러와서 <Router {routes} />
를 svelte 내 html 태그 내에 위치시키면 된다. (아래 코드 참조)
<script>
import Router from 'svelte-spa-router';
import routes from '../routes/routes';
import Aside from './Aside.svelte';
</script>
<div>
<Aside></Aside>
<main>
<Router {routes} />
</main>
</div>
이제 /admin/menu
에 접근하면 <Router />
위치에 AdminMenu.svelte
가 노출된다.
물론 article 의 경우에도 마찬가지이다.
앞으로 생길 page 들의 url 도 이런식으로 정의하고 쓰면 될듯
하다 보니까 이왕 하는 거 그냥 FE 도 대략의 틀을 갖추는 것도 나쁘지 않을듯?
전통적인 웹페이지 구조대로 아래 정도의 틀을 만들자. (Footer 는 제외)
-
App.svelte
<svelte:head> <!-- 여기는 렌더링 이후에 head 에 추가될 태그들을 정의하는 곳 --> <!-- 보통 <script> <style> 태그 등을 넣는 듯? --> </svelte:head> <script> import Header from './view/Header.svelte'; import Main from './view/Main.svelte'; </script> <div> <Header></Header> <Main></Main> </div>
-
Main.svelte
<script> import Router from 'svelte-spa-router'; import routes from '../routes/routes'; import Aside from './Aside.svelte'; </script> <div> <Aside></Aside> <main> <Router {routes} /> </main> </div>
이제 svelte - Material UI 를 설치한 다음에 header 부터 차근 차근 꾸며 보자.
https://sveltematerialui.com 에서 나온대로 차근 차근 하나씩 실행했다.
먼저 smui-theme
, svelte-material-ui
모듈을 깔고 App.svelte - <svelte:head>
내에 관련 css 파일을 추가하자.
<svelte:head>
<!-- https://sveltematerialui.com/REPL.md -->
<!-- Fonts -->
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,600,700" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Mono" />
<!-- Material Typography -->
<link rel="stylesheet" href="https://unpkg.com/@material/[email protected]/dist/mdc.typography.css" />
<!-- SMUI -->
<link rel="stylesheet" href="https://unpkg.com/svelte-material-ui/bare.css" />
</svelte:head>
yarn smui-theme template src/theme
명령어를 입력하면 src/theme
디렉토리 내 template 관련 scss 파일이 만들어진다. (잘 모르지만 initial 과정이라 생각하자.)
근데 scss 파일을 그대로 사용하지는 못하니까 css 파일로 컴파일하는 과정이 필요하다.
package.json 내에 scss 를 컴파일하는 script 를 추가하자.
"scripts": {
"smui-theme-light": "smui-theme compile public/build/smui.css -i src/theme",
"smui-theme-dark": "smui-theme compile public/build/smui-dark.css -i src/theme/dark",
"build": "node esbuild.js && yarn build-smui",
"build-smui": "yarn smui-theme-light && yarn smui-theme-dark",
"dev": "nodemon --watch src/ -e js,svelte --exec \"yarn build && node local-server.js\""
},
이제 빌드하면 public/build/smui.css
, public/build/smui-dark.css
파일이 생성된다.
따라서 App.svelte - <svelte:head>
내에 smui.css 파일을 넣는 코드를 추가하자.
<link rel="stylesheet" href="/build/smui.css" media="(prefers-color-scheme: light)" />
<link rel="stylesheet" href="/build/smui-dark.css" media="screen and (prefers-color-scheme: dark)" />
이제 material ui 를 사용해서 header 를 대충이라도 구성해보자... 그건 다음 시간에...
Author And Source
이 문제에 관하여(Svelte - Router 그리고 Material UI), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@crazydj/블로그-직접-만들기-대작전-Svelte-Router-그리고-Material-UI저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)