新增資料夾 config/firebaseConfig.js’內容如下
1 | 導入資料庫 |
Create
1 | <!–訊息表單新增–> |
Read
1 | <template> |
Firebase 語法
ref():尋找資料庫路徑
set():新增資料
on(隨時監聽)
push – 新增資料
child 子路徑
remove 移除
1 | 導入資料庫 |
1 | <!–訊息表單新增–> |
1 | <template> |
ref():尋找資料庫路徑
set():新增資料
on(隨時監聽)
push – 新增資料
child 子路徑
remove 移除
1 | .onclick{ |
1 | .menu { |
1 | scss |
Scss
1 | $font-stack: Helvetica, sans-serif; |
變數編譯後Css
1 | body { |
Scss
1 | nav { |
巢狀編譯後Css
1 | nav ul { |
Scss
1 | // 經常重複使用的樣式 |
混入 Mixins編譯後Css
1 | .box { |
Scss
1 | /* This CSS will print because %message-shared is extended. */ |
混繼承 Extent編譯後Css
1 | /* This CSS will print because %message-shared is extended. */ |
@mixin 的好處:減少重複撰寫樣式,卻也可能造成編譯後的 CSS 樣式大量重複,使檔案異常肥大。
是否需傳遞參數
是否需考慮編譯後 CSS 大小
編譯前 SCSS:要作為模組載入的 SCSS 檔案,名稱必須帶有底線,例如 _base.scss。
1 | npm install -g sass |
1 | sass --version |
參考資料
sass 安裝
# 新增styles.scss
1 | $primary: #30c39e; |
1 | //window |
喜好設定->設定打開Setting .json
設置參數放工作區設定的大括弧內
1 | //css產出設定 |
內有scss/style.scss
視窗下方藍色區域是否出現了一個小小的按鈕寫著Watch Sass,按下執行
畫面會新增 style.css.map
畫面會新增 style.css

Step1.新增專案
Step2.啟用Api服務
搜尋Google Sheet
啟用Google Sheet服務
Step3.建立憑證(api金鑰 /Oauth /服務帳戶)
api金鑰:key=API_KEY
憑證=>點選API金鑰
=>金鑰限制 => 應用程式限制 =>HTTP 參照網址 (網站)
=>網站限制 =>點選新增:新增網址
=>API 限制:不限制金鑰
如果只是使用Google Sheet 以下(Oauth,服務帳戶)非必要
Oauth

服務帳戶

Api金鑰(憑證Api金鑰)等下串接會用到
二.新增Sheet試算表 粗字體是docId
https://docs.google.com/spreadsheets/d/19YWnM9PrXXEUOcT9zWkQYpiZ1W3o6i-UToEGsUPcFcU/edit#gid=0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43<template>
<div class="hello">
<table class="Lists" align="center">
<tr v-for="item in lists" :key="item">
<td v-for="j in item" :key="j">{{ j }}</td><td><i class="fa-solid fa-circle-plus"></i></td>
</tr>
</table>
</div>
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue'
import axios from 'axios';
const lists = ref<any>();
const getData = async () => {
//docId=>文件id
const docId = '憑證Api金鑰';
const apiKey = '試算表的ID';
const api = `https://sheets.googleapis.com/v4/spreadsheets/${docId}/values/商品列表?alt=json&key=${apiKey}`;
await axios
.get(api)
.then(res => {
lists.value = res.data.values;
console.log(res.data);
for (var i = 0; i <= lists.value.length; i++) {
// title
var title = lists.value[0];
var objTitle = {};
for (var j = 0; j <= title.length; j++) {
objTitle = title[j]
}
}
});
}
onMounted(() => {
getData();
});
</script>
處理方式:=>網站限制 =>點選新增:新增網址 =>API 設置為不限制
=>金鑰限制 => 應用程式限制 =>HTTP 參照網址 (網站)
=>網站限制 =>點選新增:新增網址
=>API 限制:不限制金鑰
Requests from referer \u003cempty\u003e are blocked.
處理方式:API 設置為不限制
=>API 限制:不限制金鑰
permissionPERMISSION DENIED
處理方式:
命名工作區
將Google Sheet 改為共用
新增stores / googlesheet.js
1 | import { defineStore } from 'pinia'; |
#專案內:.env.development,.env.production,.env.staging
新增
1 | VITE_API_GOOGLE_KEY = GOOGLE_KEY |
#頁面使用goolgesheet 數據
//引入{ storeToRefs } from ‘pinia’=>
1 | <template> |
選擇登入



OpenWeatherMap
建立一個帳號,建立一個金鑰
https://openweathermap.org/
#使用fetch
${ import.meta.env.VITE_API_URL },${ import.meta.env.VITE_API_KEY }為環境變數
請參閱
1 | <script setup lang="ts"> |
1 | npm install axios --save |
1 | <script setup lang="ts"> |
Vite 6安裝
node 20.15.1
gitHub上的說明(vite ^6.0.1”)
相容性說明
Vite 需要 Node.js 版本 18+。 20+。 但是,某些模板需要更高的 Node.js 版本才能運作,如果您的套件管理器發出警告,請升級。
1 | npm create vite@latest 資料名 |
1 |
|
1 | cd vite-project |
安裝完成
gitHub上的說明
gitHub上的說明(vite ^5.1.0”)
修改vite.config.js 檔案,加入以下
1 | import { fileURLToPath, URL } from 'node:url'; |
當從命令列執行 vite 時,Vite 會自動嘗試解析專案根目錄中名為 vite.config.js 的設定檔(也支援其他 JS 和 TS 擴充功能)。
最基本的設定檔如下所示:
官網說明
完整檔案
1 | import { defineConfig } from 'vite' |
1 | npm install --save-dev @types/node |
**在專案內加入env資料夾資料夾內新增:.env.development,.env.production,.env.staging
開發端環境.env.development
1 | VITE_API_URL = '開發端環境Api網址' |
正式主機位置.env.production
1 | VITE_API_URL = '正式主機位置Api網址' |
測試環境.env.staging
1 | # QA測試環境 |
在頁面中使用環境變數
如果在開發中會得到開發中的變數,正式環境就得到正式環境中的變數,測試環境以此類推
環境變數的命名都大寫搭配底斜線如=>VITE_API_URL=’https://xxx.tw‘
使用import.meta.env.VITE_API_URL
1 | import.meta.env.VITE_API_URL |
gitHub上的說明-新增環境變數
gitHub上的說明 頁面的使用import.meta.env.VITE_API_BASIC_URL
環境變數
在 src 目錄下建立 env.d.ts
增加 ImportMetaEnv
1 | /// <reference types="vite/client" /> |
當執行npm install指令的時候,會根據package.json檔案中的設定自動下載所需的模組
紀錄這個專案的各種模組,以及專案的設定資訊(例如名稱、版本、授權等)
必須小於等於214個字符,不能以.或_開頭,不能有大寫字母,因為名稱最終成為URL的一部分因此不能包含任何非URL安全字符。
名稱和版本一起構成一個標識符,該標識符被認為是完全唯一的
是一個字串組成的數組,有助於人們在npm庫中搜尋的時候發現你的模組
如果這個屬性被設定為true,npm將拒絕發布它,這是為了防止一個私有模組被無意間發佈出去
項目的主頁地址
用於專案問題的回饋issue地址或一個郵箱。
是目前專案的協議,讓使用者知道他們有何權限來使用你的模組,以及使用該模組有哪些限制。
author是具體一個人,contributors表示一群人,他們都表示當前專案的共享者。同時每個人都是一個物件。具有name欄位和可選的url及email欄位。
執行腳本指令的npm命令列縮寫,例如start指定了執行npm run start時,所要執行的命令。
當安裝依賴的時候使用–save參數表示將該模組寫入dependencies屬性
–save-dev表示將該模組寫入devDependencies屬性。
例如Node或npm的某個版本或瀏覽器。
1 | { |
參考資料
package.json文件
首先先建立Vite專案 Vite 安裝 typescript
建立專案時要加入單元測試必須在Vitest 需要 Vite >=v5.0.0 和 Node >=v18.0.0
1 | cd 到專案 |
jsdom:是一個可以使用類似dom元件操作方式來操作html text的工具
在 ~專案根目錄/package.json
執行腳本指令新增單元測試所需要的指令
scripts加入
“test”: “vitest –environment jsdom”,(啟動單元測試指令時環境內的jsdom)
設定檔 package.json行腳本指令
1 | "scripts": { |
範例:子元件 mount,props
在 src/components/內新增HelloWorld.spec.js
解釋名詞:mount
mountVue 中的 Test Utils 是測試 Vue 元件的關鍵函數。 它是創建 Vue 應用程式的主要方法,該應用程式在測試環境中託管和渲染被測元件。
describe & it 輔助 API
準備 => 操作 => 斷言
1 | //引入描述、它、斷言 如果在使用 |
執行啟動單元測試指令
1 | npm run test |
得到以下
Vitest 支援兩種程式碼覆蓋率引擎,v8 和 Istanbul。
v8 使用Chrome v8 引擎中內建的程式碼覆蓋率測量。
v8 的一大優點是不需要預先檢測和轉譯。
v8 無法區分 if 語句、三元條件或 for 迴圈中的條件。它將它們全部突出顯示為條件表達式。
Istanbul是一個歷史悠久的 JavaScript 測試覆蓋率工具。
Istanbul檢測需要使用 Babel 插件實現轉譯過程。幸運的是,一切都由 Vitest 為您處理。
Istanbul的一大優勢是偵測發生在單行程式碼的層級。您應該得到非常精確的結果。只有您感興趣的程式碼才會被偵測。
安裝@vitest/coverage-v8 與vitest/coverage-istanbul指令
1 | npm install -D @vitest/coverage-v8 |
1 | npm install -D @vitest/ui |
1 |
|
在package.json 修改以下
1 | "scripts": { |
執行啟動單元測試指令
1 | npm run test |
執行啟動npm run coverage 後專案根目錄會產生了一個coverage 資料夾內index.html即是以下圖片
覆蓋率列表
所有文件
38.59% Statements(聲明) 22/570% Branches (分行) 0/20% Functions(函式) 0/338.59% Lines (行) 22/57
單元測試覆蓋率,維測試介面與 設置
在生產環境刪除 data-* attribute
若想在 vitest 中移除 data-* 也非常的簡單,我們只需要在 vite.config.js 設定中,針對 Vue 底下的編譯選項做一些調整即可(底下示範的版本為移除 data-test,若使用其他命名請自行調整囉):
vite.config.js
1 | const isProd = process.env.NODE_ENV === 'production' |
組件有串接Api時
1 | GuessAge.vue |
安裝 msw
1 | npm install msw --save-dev |
建立假資料
新增src/mocks/handlers.js
1 | // src/mocks/handlers.js |
攔截 http 請求
生成地方
1 | // |
生成模擬Api資料夾
參考資料
GuessAge測試文件
GuessAge測試文件
1 | //GuessAge.spec.js |
安裝happy-dom
1 | npm install happy-dom@6.0.4 |
1 | npm i -D @vitest/coverage-istanbul |
目錄
參考資料