EP39 - 外掛

更新 發佈閱讀 7 分鐘
Plugins 外掛,好奇有什麼好用的外掛嗎?
外掛用的好~開發沒煩惱 www
能客製化外掛也是蠻重要的~~

介紹 - Introduction

插件是自包含的代碼,通常用於為 Vue 添加應用級別的功能。這是安裝插件的方法:

import { createApp } from 'vue'

const app = createApp({})

app.use(myPlugin, {
/* 可選配置 */
})

插件可以定義為一個暴露 install() 方法的物件,或者作為安裝函數本身的函數。install 函數接收應用實例以及傳遞給 app.use() 的額外選項(如果有):

const myPlugin = {
install(app, options) {
// 配置應用
}
}

插件沒有嚴格定義的範圍,但插件有以下常見的用途:

  • 使用 app.component()app.directive() 註冊一個或多個全局組件或自定義指令。
  • 通過調用 app.provide() 使資源可在整個應用中注入
  • 通過將它們附加到 app.config.globalProperties 來添加一些全局實例屬性或方法。

需要執行上述操作組合的庫(例如 vue-router)通常會使用插件。

Q: 組件與外掛差異?

在 Vue 中,組件(Component)和外掛(Plugin)有不同的用途和功能,以下是它們的主要差異:

定義與用途

  • 組件(Component):
    • 組件是 Vue 應用的基本構建塊,封裝了 HTML、CSS 和 JavaScript。它們用於創建可重用的 UI 部分,讓開發者能夠更好地組織和管理應用的界面。
    • 每個組件都有自己的狀態(data)和生命週期,可以接收屬性(props)並發出事件。
  • 外掛(Plugin):
    • 外掛是用於擴展 Vue 應用功能的自包含代碼,通常用於添加應用級別的功能,如全局註冊組件、添加全局方法或資源注入。
    • 外掛使用 app.use() 方法進行安裝,並且可以在全局範圍內影響應用。

2. 使用場景

  • 組件:
    • 適合用於創建可重用的 UI 元素,如按鈕、表單、模態框等,並且可嵌套其他組件以構建複雜的界面。
  • 外掛:
    • 適合用於需要在多個組件之間共享功能或狀態的情況,例如路由管理(vue-router)、狀態管理(Vuex)或全局事件總線。

3. 設計模式

  • 組件:
    • 通常以模板和組件選項(如 datamethodscomputed)的形式進行定義,並且有明確的輸入(props)和輸出(事件)。
  • 外掛:
    • 通常以對象或函數的形式進行定義,包含一個 install 方法,負責配置應用的全局屬性或方法。

總結

簡而言之,組件主要用於構建 UI 元素,而外掛則用於擴展應用的功能。在實際開發中,通常會結合使用組件和外掛,以便更有效地開發和管理 Vue 應用。

編寫外掛 - Writing a Plugin

為了更好地理解如何創建自己的 Vue.js 外掛,我們將創建一個非常簡化的外掛,顯示 i18n(國際化)的字符串。

首先,我們將設置外掛對象。建議在單獨的文件中創建並導出它,以保持邏輯的封裝和分離,示例如下:

// plugins/i18n.js
export default {
install: (app, options) => {
// 外掛代碼在這裡
}
}

我們希望創建一個翻譯函數。這個函數將接收一個以點分隔的鍵字符串,並用來在用戶提供的選項中查找翻譯字符串。這是模板中的預期用法:

<h1>{{ $translate('greetings.hello') }}</h1>

由於這個函數應該在所有模板中全局可用,我們將通過將其附加到 app.config.globalProperties 中來實現:

// plugins/i18n.js
export default {
install: (app, options) => {
// 注入全局可用的 $translate() 方法
app.config.globalProperties.$translate = (key) => {
// 使用 `key` 作為路徑來檢索 `options` 中的嵌套屬性
return key.split('.').reduce((o, i) => {
if (o) return o[i]
}, options)
}
}
}

我們的 $translate 函數將接受像 greetings.hello 的字符串,查看用戶提供的配置並返回翻譯的值。

包含翻譯鍵的對象應在安裝期間通過額外的參數傳遞給外掛:

import i18nPlugin from './plugins/i18n'

app.use(i18nPlugin, {
greetings: {
hello: 'Bonjour!'
}
})

現在,我們的初始表達式 $translate('greetings.hello') 將在運行時被替換為 Bonjour!

另見: Augmenting Global Properties 

提示:儘量少用全局屬性,因為如果在應用中使用太多不同外掛注入的全局屬性,可能會快速變得混淆。

提供/注入與外掛 - Provide / Inject with Plugins

外掛也允許我們使用注入(inject)來提供函數或屬性給外掛的使用者。例如,我們可以讓應用程序訪問選項參數,以便使用翻譯物件。

// plugins/i18n.js
export default {
install: (app, options) => {
app.provide('i18n', options)
}
}

現在,外掛使用者將能夠使用 i18n 鍵將外掛選項注入到他們的組件中:

<script setup>
import { inject } from 'vue'

const i18n = inject('i18n')

console.log(i18n.greetings.hello)
</script>

NPM 打包 - Bundle for NPM

如果您還想為他人構建並發佈您的外掛,請參閱 Vite 的庫模式部分

寫外掛感覺可以更了解全局的應用~
有機會想來寫一些有趣的外掛
再來繼續練習吧~~
留言
avatar-img
卡關的人生
4會員
73內容數
分享生活趣事~
卡關的人生的其他內容
2024/11/10
Vue 提供了多種動畫技術來提升應用程式的互動性,包括基於 CSS 類別的動畫、基於狀態的動畫,以及使用監視器來動畫化數值。基於類別的動畫可通過動態添加 CSS 類別來觸發,像是觸發按鈕搖動效果。基於狀態的動畫則是透過樣式綁定,根據互動動態調整元素的外觀,例如根據滑鼠位置改變背景顏色。
Thumbnail
2024/11/10
Vue 提供了多種動畫技術來提升應用程式的互動性,包括基於 CSS 類別的動畫、基於狀態的動畫,以及使用監視器來動畫化數值。基於類別的動畫可通過動態添加 CSS 類別來觸發,像是觸發按鈕搖動效果。基於狀態的動畫則是透過樣式綁定,根據互動動態調整元素的外觀,例如根據滑鼠位置改變背景顏色。
Thumbnail
2024/11/09
Web Components 是一組網頁原生 API,允許開發者創建可重複使用的自訂元素。Vue 與 Web Components 是互補的技術,Vue 支援整合和創建自訂元素。
Thumbnail
2024/11/09
Web Components 是一組網頁原生 API,允許開發者創建可重複使用的自訂元素。Vue 與 Web Components 是互補的技術,Vue 支援整合和創建自訂元素。
Thumbnail
2024/11/08
Vue 建議使用模板構建應用程式,但在需要 JavaScript 的全程式化功能時,渲染函數可派上用場。渲染函數通過 h() 函數創建 vnode,h 是 hyperscript 的簡寫,能生成 HTML 的 JavaScript。
Thumbnail
2024/11/08
Vue 建議使用模板構建應用程式,但在需要 JavaScript 的全程式化功能時,渲染函數可派上用場。渲染函數通過 h() 函數創建 vnode,h 是 hyperscript 的簡寫,能生成 HTML 的 JavaScript。
Thumbnail
看更多
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
如何在 Vite 專案中安裝和設置 TypeScript 及路徑別名的步驟,包括安裝必要的依賴、配置 vite.config.js、tsconfig.json 的設置,及如何創建類型聲明文件來正確識別 .vue 文件。
Thumbnail
如何在 Vite 專案中安裝和設置 TypeScript 及路徑別名的步驟,包括安裝必要的依賴、配置 vite.config.js、tsconfig.json 的設置,及如何創建類型聲明文件來正確識別 .vue 文件。
Thumbnail
先前提到 Quasar 的 Dialog Plugin 很好用,再讓我補充一個用法。
Thumbnail
先前提到 Quasar 的 Dialog Plugin 很好用,再讓我補充一個用法。
Thumbnail
各位使用 Vue.js 開發的小夥伴們,你們都怎麼實作父子層組件資料的雙向綁定呢?如果你還在寫 prop + emit 的話,不妨進來看看吧。
Thumbnail
各位使用 Vue.js 開發的小夥伴們,你們都怎麼實作父子層組件資料的雙向綁定呢?如果你還在寫 prop + emit 的話,不妨進來看看吧。
Thumbnail
一開始你先把你的專案push上去後,修改vite.config.ts ,要在裡面新增  base: "/Cart/" (/放自己的專案名稱/) build: {outDir: "docs"}, 接下來你要去你的github setting 裡面 -> Page ->選Deploy fro
Thumbnail
一開始你先把你的專案push上去後,修改vite.config.ts ,要在裡面新增  base: "/Cart/" (/放自己的專案名稱/) build: {outDir: "docs"}, 接下來你要去你的github setting 裡面 -> Page ->選Deploy fro
Thumbnail
插件的必要性 作為新手,我發現對於Zotero的插件很重要。因為原生Zotero是開源軟體,所以基本功能很簡單清晰。很多牛人陸續開發出很多很多種插件(真的很多)。這些插件用途非常多樣化,若應用得當,可以大幅提升Zotero使用效率。
Thumbnail
插件的必要性 作為新手,我發現對於Zotero的插件很重要。因為原生Zotero是開源軟體,所以基本功能很簡單清晰。很多牛人陸續開發出很多很多種插件(真的很多)。這些插件用途非常多樣化,若應用得當,可以大幅提升Zotero使用效率。
Thumbnail
在 TypeScript 中,套件是模組化代碼的集合,可以提高代碼的可重用性和可維護性。常見的套件包括各種庫和框架,如 lodash、express 等。以下是有關引用套件、自定義套件和常見套件的詳細介紹。
Thumbnail
在 TypeScript 中,套件是模組化代碼的集合,可以提高代碼的可重用性和可維護性。常見的套件包括各種庫和框架,如 lodash、express 等。以下是有關引用套件、自定義套件和常見套件的詳細介紹。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News