---
# System prepended metadata

title: Fontawesome in Vue3 with TS
tags: [Vue3]

---

# Fontawesome in Vue3 with TS
###### tags: `Vue3`


package.json
貼上這些安裝fontawesome包
```
"dependencies": {
    "@fortawesome/fontawesome-svg-core": "^1.2.34",
    "@fortawesome/free-brands-svg-icons": "^5.15.2",
    "@fortawesome/free-regular-svg-icons": "^5.15.2",
    "@fortawesome/free-solid-svg-icons": "^5.15.2",
    "@fortawesome/vue-fontawesome": "^3.0.0-1"
}
```
src/libs/FontAwesomeIcon.vue
```typescript=
<template>
  <svg
    xmlns="http://www.w3.org/2000/svg"
    :class="$props.class"
    :viewBox="`0 0 ${width} ${height}`"
  >
    <path fill="currentColor" :d="svgPath" />
  </svg>
</template>

<script>
import { defineComponent, computed } from 'vue'
import { findIconDefinition } from '@fortawesome/fontawesome-svg-core'

export default defineComponent({
  name: 'FontAwesomeIcon',

  props: {
    icon: {
      type: String,
      required: true
    },
    type: {
      type: String,
      default: 'fas',
      required: false
    },
    class: String
  },

  setup (props) {
    const definition = computed(() =>
      findIconDefinition({
        prefix: props.type,
        iconName: props.icon
      })
    )
    const width = computed(() => definition.value.icon[0])
    const height = computed(() => definition.value.icon[1])
    const svgPath = computed(() => definition.value.icon[4])

    return { width, height, svgPath }
  }
})
</script>

```

src/plugins/font-awesome.ts
```typescript=
import { library } from '@fortawesome/fontawesome-svg-core'
import { fas } from '@fortawesome/free-solid-svg-icons'
import { far } from '@fortawesome/free-regular-svg-icons'
import { fab } from '@fortawesome/free-brands-svg-icons'
import FontAwesomeIcon from '@/libs/FontAwesomeIcon.vue'
library.add(fas, far, fab)
export { FontAwesomeIcon }

```

main.ts
```typescript=
import { createApp } from 'vue'
import './assets/style.scss'
import { FontAwesomeIcon } from '@/plugins/font-awesome'
import App from './App.vue'
const app = createApp(App)
app.component('fa', FontAwesomeIcon).mount('#app')

```
上面的檔案都建立好後照以下用法即可使用fontawesome圖案
```
<fa icon="star-half" type="fas" class="star-icon"></fa>
```

上面這種用法是最懶惰的方法，把整個fontawesome都包進去了
這樣在打包的時候會超大包
所以可以改成只取要用的icon就好

類似這樣
```javascript=
import { library } from '@fortawesome/fontawesome-svg-core'
import { faPencilAlt, faCode, faMagic, faExchangeAlt, faChevronLeft, faChevronRight } from '@fortawesome/free-solid-svg-icons'
import { faAddressCard, faEnvelope } from '@fortawesome/free-regular-svg-icons'
import { faGithubAlt, faCodepen, faLinkedinIn } from '@fortawesome/free-brands-svg-icons'
import FontAwesomeIcon from '@/libs/FontAwesomeIcon.vue'
library.add(faAddressCard, faEnvelope, faPencilAlt, faGithubAlt, faCodepen, faLinkedinIn, faPencilAlt, faCode, faMagic, faExchangeAlt, faChevronLeft, faChevronRight)
export { FontAwesomeIcon }
```