iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0
Modern Web

了不起的 Svelte系列 第 3

第 03 天:初探專案架構

  • 分享至 

  • xImage
  •  

第 03 天:初探專案架構

「你住在前端對嗎?」她輕描淡寫的說:「我有認識個人也住那兒。」
「我才剛到,在那兒誰也不...」
「你應該會聽過 Svelte。」
「Svelte?」突然間,黛西追問:「哪一個 Svelte?」

~節錄自《The Great Svelte:第一章》

第 03 天要講的事

  1. Svelte 專案檔案架構

  昨天我們建置好了開發 Svelte 所需的環境,並且利用 Svelte 提供的模板開始了我們的第一個專案。在真正進入 Svelte 之前,就讓我們先來研究一下這個專案的檔案架構是如何設計的吧。

Svelte 專案檔案架構

  用 VSCode 開啟專案資料夾,整個檔案架構就一覽無遺了。撇除 .vscodenode_modules 這兩個資料夾不看,其他的資料夾以及檔案架構應該如下:

C:.
│   .gitignore
│   index.html
│   jsconfig.json
│   package-lock.json
│   package.json
│   README.md
│   svelte.config.js
│   vite.config.js
│
├───.vscode
├───node_modules
├───public
│       vite.svg
│
└───src
    │   app.css
    │   App.svelte
    │   main.js
    │   vite-env.d.ts
    │
    ├───assets
    │       svelte.svg
    │
    └───lib
            Counter.svelte

https://ithelp.ithome.com.tw/upload/images/20230918/20120178qagcTvNdbd.png
圖一、在 VSCode 的透視之下,Svelte 專案的檔案架構一覽無遺

  在這個專案架構下,較為重要的檔案有 4 個:index.htmlmain.jsapp.css、以及 App.svelte。就讓我們一一看個分明。

  先看看第一個檔案:

/index.html
<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" type="image/svg+xml" href="/vite.svg" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Vite + Svelte</title>
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="/src/main.js"></script>
  </body>
</html>
  • 第五行:<link rel="icon" type="image/svg+xml" href="/vite.svg" />
      指定網站圖示 (website icon) 為 /public/vite.svg。可以更改為自己想要的圖示。

  • 第七行:<title>Vite + Svelte</title>
      設定網站標題 (website title) 為 Vite + Svelte。可以更改為自己想要的標題。

  • 第十行:<div id="app"></div>
      創造一個讓 App.svelte 檔案掛載進來的切入點。稍後會說明 Svelte 是如何切入的。

  • 第十一行:<script type="module" src="/src/main.js"></script>
      將 /src/main.js 掛載進來。

  再看看第二個檔案:

/src/main.js
import './app.css'
import App from './App.svelte'

const app = new App({
  target: document.getElementById('app'),
})

export default app
  • 第一行:import './app.css'
      將我們需要套用到整個專案的 css 檔案,也就是 /src/app.css 載入進來。

  • 第二行:import App from './App.svelte'
      載入我們需要用的 Svelte 元件,也就是 /src/App.svelte

  • 第四行:const app = new App({
      初始化這個 Svelte 元件。

  • 第五行:target: document.getElementById('app'),
      並將這個元件掛載到 /index.html 當中。還記得我們先前做出了一個 <div id="app"></div> 嗎?沒錯就是掛載到那個位置。

  剩下的 app.cssApp.svelte,一個是正常的 CSS 檔案,另一個雖然沒看過,但顧名思義,應該就是以 Svelte 語法寫成的 Svelte 元件吧。CSS 檔案不須多做介紹,而 Svelte 元件則非一天可以介紹完畢的,所以這邊先不多做說明。那麼整個專案的架構就在這邊介紹完畢囉。
  接著來做真正的專案初始化動作,也就是把 Svelte 樣板當中,跟我們專案內容無關的多餘部分刪掉。舉例來說,App.svelte 的內容就可以全部刪掉,把檔案留著就好 (因為 main.js 需要用到),裡面的程式碼我們會重頭開始寫起。渲染格式用的 app.css 內容也可以全部刪掉,檔案留著 (因為 main.js 需要用到),一樣,裡面的程式碼我們可以依據自己的喜好重新撰寫。而 Counter.svelte 就可以整份檔案刪掉了。
  刪刪減減之後的檔案架構看起來就像這樣:

C:.
│   .gitignore
│   index.html
│   jsconfig.json
│   package-lock.json
│   package.json
│   README.md
│   svelte.config.js
│   vite.config.js
│
├───.vscode
├───node_modules
├───public
│       vite.svg
│
└───src
    │   app.css
    │   App.svelte
    │   main.js
    │   vite-env.d.ts
    │
    ├───assets
    │       svelte.svg
    │
    └───lib

  咦,好像就是 Counter.svelte 被刪掉而已嘛😂

https://ithelp.ithome.com.tw/upload/images/20230918/20120178jhHhG5shkT.png
圖二、空空的 App.svelte 跟空空的 app.css

  這時候如果有開著即時顯示結果的 dev server 的話,就會發現我們的專案變成一片空白了!自信點,這就是我們要的。

https://ithelp.ithome.com.tw/upload/images/20230918/20120178US9FR6tgwq.png
圖三、空空的專案

  覺得太空了有點不習慣嗎?那我們來補一點 CSS 吧。這是參考自 SvelteKit 架設在 Vercel 上的官方樣板。若想自行參考該樣板的原始碼請看這裡,該樣板的 live demo 請看這裡

:root {
  font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
  font-weight: 400;

  --color-bg-0: rgb(202, 216, 228);
	--color-bg-1: hsl(209, 36%, 86%);
	--color-bg-2: hsl(224, 44%, 95%);
  --color-bg-3: rgba(255, 255, 255, 0.7);
  --color-text: rgba(0, 0, 0, 0.7);

  color: var(--color-text);

  --border-radius: 0.5em;

  font-synthesis: none;
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  -webkit-text-size-adjust: 100%;
}

* {
  padding: 0;
  margin: 0;
  box-sizing: border-box;
}

body {
  place-items: center;
  min-width: 320px;
  height: 100vh;
  background-image: radial-gradient(
			50% 50% at 50% 50%,
			rgba(255, 255, 255, 0.75) 0%,
			rgba(255, 255, 255, 0) 100%
		),
		linear-gradient(180deg, var(--color-bg-0) 0%, var(--color-bg-1) 15%, var(--color-bg-2) 50%);
}

#app {
  margin: 0 auto;
  text-align: center;
}

  加上這些 CSS 之後,是不是變得沒那麼空了呢 😏

https://ithelp.ithome.com.tw/upload/images/20230918/20120178DnLgmI6qCG.png
圖四、沒那麼空的專案

  好的,那麼今天就到這。在明白了 Svelte 專案樣板的檔案架構之後,明天我們終於可以開始踏入 Svelte 的領域囉!


上一篇
第 02 天:建立開發環境
下一篇
第 04 天:認識 Svelte 元件
系列文
了不起的 Svelte30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言