15分鐘建立一個Snowpack + React 的專案

TigerCodingStudio
·
·
IPFS
·
photo from Snowpack

Snowpack 最為一個網頁打包工具可謂大受歡迎,相比起主流打包工具Webpack,Snowpack 更符合目前主流的開發需求,今天就帶各位用15分鐘的時間啟動一個Snowpack 加 React 的專案。

起手式

Snowpack 提供 npm 工具讓使用者可以輕易啟動任何專案 - create-snowpack-app 。你需要用到以下樣式的指令


npx create-snowpack-app new-dir --template @snowpack/app-template-NAME [--use-yarn | --use-pnpm | --no-install]


我們會用到這個樣式:

@snowpack/project-template-minimal


如果你想要建立一個名叫 snowpack-react 的專案,你可以在terminal進入你指定的路徑,然後輸入以下指令:

npx create-snowpack-app snowpack-react --template @snowpack/app-template-minimal


運行網頁

當 npm 執行完畢後,

cd react-snowpack 
npm run start

你應該可以看到這個頁面

安裝 React

接著你需要

npm install react react-dom

Snowpack 支援 JSX 檔案格式,所以你不需要額外安裝任何工具。你需要把你目前的 index.js 檔案重新命名為 index.jsx 。千萬不要修改 index.html 裡面的 script 路徑,因為你的瀏覽器看不懂 JSX。

以下是我更新過後的 index.jsx 和 index.html 檔案

// index.jsx
import React from 'react';
import ReactDOM from 'react-dom';

ReactDOM.render(<div>React with Snowpack</div>, document.getElementById('root'));

在 index.html

加入 <div id="root">

<!DOCTYPE html>
<html lang="en">
 <head>
   <meta charset="utf-8" />
   <meta name="viewport" content="width=device-width, initial-scale=1" />
   <meta name="description" content="" />
   <link rel="stylesheet" type="text/css" href="/index.css" />
   <title></title>
 </head>
 <body>
   <div id="root"></div>
   <script type="module" src="/index.js"></script>
 </body>
</html>

設定檔

通常,你會將自己的React組件代碼放在src目錄下,並將global asset (.css, .png) 放在public目錄下。

因此,您接下來要做的就是相應地移動文件。但這也意味著Snowpack將無法正常運行,所以你需要更新你的 snowpack.config.js

以下是更新後的目錄結構:

這是更新後的 snowpack.config.js :

/** @type {import("snowpack").SnowpackUserConfig } */
module.exports = {
 mount: {
   // default build folder name is build
   src: '/dist',
   public: '/'
 },
 plugins: [
 ],
 routes: [
   /* Enable an SPA Fallback in development: */
   // {"match": "routes", "src": ".*", "dest": "/index.html"},
 ],
 optimize: {
   /* Example: Bundle your final build: */
   // "bundle": true,
 },
 packageOptions: {
 },
 devOptions: {
 },
 buildOptions: {
 },
};


mount 的設定可以變更 Snowpack 尋找建置所需檔案的路徑,Key 是你的資料夾名稱,而value則是你指定的建置路徑。像是這樣

src => build/dist
public => build/


接下來你因為結構的變化,你需要更新你的 index.html 檔案:

// replace <script type="module" src="/index.js"></script>
<script type="module" src="/dist/index.js"></script>


你現在需要重新啟動你的網頁

npm run start


為了確認你的設定檔運行無誤,你可以執行:

npm run build


你可以看到你的 build 資料夾已經按照設定檔更新了

Fast Refresh

Snowpack 提供了 React Fast Refresh 的功能,你的瀏覽器可以在不用刷新頁面的清況下運行改變過的程式碼。為此,我們需要修改我們的 index.jsx,並加入 Hot Module Replacement 。

// index.jsx
import React from 'react';
import ReactDOM from 'react-dom';

ReactDOM.render(<div>React with Snowpack</div>, document.getElementById('root'));

// Hot Module Replacement
if (import.meta.hot) {
 import.meta.hot.accept();
}


再接著以下的教學之前,建議你可以在 index.jsx 裡面加入一個簡單的 App Component 來測試一下 Fast Refresh 功能,也方便測試接下來要教的另外一個功能。

在 React 開發的過程中,我們時常需要用到不同的 state,但是每當程式碼更新,頁面刷新後,當下的 state 也往往一併消失。這個時候我們可以加入 Snowpack 提供的插件

@snowpack/plugin-react-refresh

安裝指令

npm install @snowpack/plugin-react-refresh --save-dev


你也需要更新 snowpack.config.js 以便套用插件,更改 plugins key:

...
},
plugins: ['@snowpack/plugin-react-refresh'],
routes: [
...


現在你使用 Snowpack 提供的所有酷炫功能,並繼續你的開發。


Happy Coding




Reference


CC BY-NC-ND 2.0 授权

喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!