VueJs3 使用 FontAwesome
開始之前
使用的會是 VueJs 3 + FontAwesome 5 與 6,方式為 svg + js method,而非 web font。兩種方式的 FontAwesome 差別在安裝的 icon package 不同,詳細差別請見官方文件:Web Fonts vs SVG | FontAwesome Docs,建議使用 svg + js method 的方式。而版本 5 與 6 差別只在安裝的 icon package 版本不同,可以視 icon 樣式(相同的 icon 在兩個版本可能長得不太一樣)需求安裝對應的版本。
故整個設置起來會需要的是:
- VueJs 3
- FontAwesome svg core package
- FontAwesome icon packages
- FontAwesome vue component package
截至 2022.03 為止 vue component package 在 vue 2 與 vue 3 使用的版本還是不同,這邊要注意。
資訊
- Font Awesome
- Set Up with Vue.js | Font Awesome Docs:最新版的 fontawesome 的文件
- Vue.js | Font Awesome Docs:為 fontawesome 5 的文件
- Github - FontAwesome/vue-fontawesome
- Web Fonts vs SVG | Font Awesome Docs
package.json
因個人專案需求使用的是 VueJs 3 + fontawesome 5,故此檔案這部分會是長這樣:
1 | { |
這邊不知道那五個 fontawesome 是什麼沒啥問題,後面會介紹。
設置開始
1. 安裝 svg core
1 | npm |
SVG Core 的介紹可以看這邊 SVG Core | Font Awesome Docs,他可以減少專案最後打包的版本,因為只打包了專案有使用的 icon,而非像 web font 那樣打包了所有的 icon(但其實使用到的很少)。
2. 安裝 icon packages
Font Awesome icon package 有分免費版跟付費版,icon 數量上一定有差別,一樣依需求選擇即可,以目前個人專案使用來說免費版就蠻夠用了。
Plan 與價格可以看這邊:Plans & Pricing | Font Awesome
免費版跟付費版 icon 目前看來差別在付費版有 Light 與 Thin 版本,而一個 icon solid 與 regular 版本可能分別在免費版與付費版裡。
免費版 icon
1 | npm |
不指定版本的話會是 fontawesome 6(就是最新版),如要使用 5 的話需指定版本,例如 npm 的話:
1 | npm i --save @fortawesome/free-solid-svg-icons^5.15.4 |
付費版 icon
這邊是參考官方的寫法
1 | npm |
3. 安裝 vue component
這邊在 Vue 2 與 Vue 3 有差別,官方寫法是 Vue 2 的版本,Vue 3 需到 component github 才有說明
1 | npm |
使用
1. 全域設定 fontawesome vue component
首先需要在 main.js
全域設定這個 component,才能直接在其他的 component 內直接使用。
1 | // main.js |
.component('FontAwesomeIcon', FontAwesomeIcon)
也可以寫成 .component('font-awesome-icon', FontAwesomeIcon)
,兩者在 component 內使用的方式都是 <font-awesome-icon></font-awesome-icon>
。
2. 尋找需要的 icon 並使用
接著就到官網 Icons | FontAwesome 找需要的 icon。搜尋框可以切換使用的 fontawesome 版本,要注意的是 5 與 6 相同的 icon 名稱可能不同(例如單字內容相同但順序不同:5 版叫 plus-square
,6 版叫 square-plus
)。
以 5 版 solid 的 plus-square
為例:
1 | <font-awesome-icon :icon="['fas', 'plus-square']"></font-awesome-icon> |
最後der碎碎念
嘗試使用另外一個方式使用 fontawesome 沒想到就撞在 Vue 3 + latest component 無法使用的狀況,爬了文才發現 Vue 3 得使用 prerelease 版。接著又撞到 5 與 6 版 icon 名稱不同的問題,所以我說為啥換版本名稱要顛倒啊 fontawesome,名字相同不好嗎?