# Yarn + Vite + React + Typescript + tailwind 環境建置 ## Ubuntu yarn 安裝與環境設定 ```bash sudo apt update -y && sudo apt upgrade -y sudo apt install nodejs npm -y sudo corepack enable corepack enable sudo corepack prepare yarn@v3.5.0 --activate corepack prepare yarn@v3.5.0 --activate sudo npm install --global yarn # 全域安裝 yarn ``` :::info 如果遇到 PPA 查找錯誤導致無法 update 的議題 (與本次目標直接關聯),可進入 `/etc/apt/sources.list.d` 中刪除所有 PPA。 ::: ## macOS yarn 環境設定 ```bash brew install node # node and npm brew install yarn # yarn ``` ## 建構軟體並設定開發環境 ### 建構軟體模板 ```bash yarn create vite YOUR_APP --template react-ts cd YOUR_APP ``` ### 為本專案準備 v2 以後的 yarn 版本 > 比如 `3.5.0` ```bash yarn set version stable yarn --version # e.g. 3.5.0 ``` ### 以 yarn 初始化以 VSCode 開發之專案 ```bash yarn install yarn dlx @yarnpkg/sdks vscode ``` 注意,第二條命令必須在 yarn v2 以上才可運行,若遇到 ```bash Internal Error: This tool can only be used with projects using Yarn Plug'n'Play ... ``` 的問題,請依照 [yarn v2](#yarn-v2-up-%E8%88%87-yarn-v1) 的指示調整。 ### 新增開發時使用之套件 :::info 基本觀念: `npm` 中以 `@` 開頭之套件為有 scope 的套件。Scope 是為了給一群套件附上一個主標籤 (很像作用域、命名空間的意思),方便管理套件集合而出現的類別。 欲知詳情,可使用 `npm help scope`,官方提示即給出清楚的解釋。 ::: ```bash # basic packages yarn add --dev autoprefixer tailwindcss prettier postcss # packages about eslint yarn add --dev eslint eslint-config-prettier eslint-plugin-prettier # Add scoped packages yarn add --dev @typescript-eslint/eslint-plugin @typescript-eslint/parser @vitejs/plugin-react ``` ## 啟用 VSCode 的各項輔助工具 ### 自動安裝外掛 > 如果正確[新增開發時使用之套件](#新增開發時使用之套件),yarn 會自動幫我們添加並設定好本檔案,但並不會有最後一個套件,不過我非常推薦使用。 新增 `extensions.json`,並加入以下內容,如此一來於任何電腦的 VSCode 中開啟本專案都會自動下載必要外掛。 ```json { "recommendations": [ "arcanis.vscode-zipfs", "dbaeumer.vscode-eslint", "esbenp.prettier-vscode", "rvest.vs-code-prettier-eslint" ] } ``` ### 啟用 ESlint 強化 IntelliSense 新增 `.eslintrc` 檔並加入客製化設定。比如以下此將會啟用 Typescript 的 ESlint 以及與 Prettier 外掛連動。同時規定 Typescript 中不允許有未使用之變數和顯式 `any` 變數。 ```json { "extends": [ "plugin:@typescript-eslint/recommended", "plugin:prettier/recommended" ], "plugins": [ "@typescript-eslint", "prettier" ], "rules": { "no-console": "warn", "@typescript-eslint/no-unused-vars": "error", "@typescript-eslint/no-explicit-any": "error", "prettier/prettier": "error" } } ``` ### Prettier 細節設定 新增 `.prettierrc` 檔並加入客製化設定,比如: ```json { "singleQuote": true, "semi": false } ``` 第一行表啟用單引號字串,第二行表允許無分號結尾。 ## 難疑排解 ### yarn 任何抽搐行為 > 遇到 yarn 任何抽搐行為,走投無路時... * 殺掉 `yarn.lock` (紀錄 package 版本鎖定的檔案) * `yarn install` 重新裝載套件 ### yarn 與 npm 由於我們使用 yarn (npm 的改良版) 而非 npm,雖然前者可識別後者,但反之不行,故避免使用 `npm` 指令進行套件管理操作。 ### yarn v2 (up) 與 yarn v1 yarn v2 中套件依賴的管理會以壓縮檔的形式存在 `.yarn` 資料夾下,不應該出現 `node_module` 資料夾。若有表示 * 不小心用上 `npm` $\rightarrow$ 不要用 `npm` * yarn 版本過舊 (v1),則 * 以 `yarn set version stable` 切換至版本更新的 yarn * 確認 `.yarnrc.yml` 中沒有 `nodeLinker: node-modules` 這句 (表示 link 於 `node_modules`) * 照「yarn 任何抽搐行為」的指示繼續 ### 其他瑣碎問題 * 修改 Prettier 設定檔後重新載入 VSCode 頁面才會生效 * 套件的加入不應直接編輯 `package.json`,應該使用 `yarn add` 命令完成