Pluginy
Úvod
Pluginy jsou samostatné kusy kódu, které obvykle přidávají do Vue funkcionalitu na úrovni aplikace. Plugin instalujeme takto:
js
import { createApp } from 'vue'
const app = createApp({})
app.use(myPlugin, {
/* nepovinné parametry */
})
Plugin je definován buď jako objekt, který vystavuje metodu install()
, nebo jednoduše jako funkce, která se jako instalátor chová sama. Instalační funkce obdrží instanci aplikace spolu s dalšími parametry předanými do app.use()
, pokud existují:
js
const myPlugin = {
install(app, options) {
// konfigurace aplikace
}
}
Pro pluginy neexistuje žádný přesně definovaný rozsah, ale běžné scénáře, ve kterých jsou užitečné, zahrnují:
Registrace jedné nebo více globálních komponent nebo vlastních direktiv pomocí
app.component()
aapp.directive()
.Označení zdroje jako injectable napříč aplikací prostředinctvím volání
app.provide()
.Přidání globálních promměných instance či metod jejich připojením k
app.config.globalProperties
.Knihovna, která potřebuje provést kombinaci výše uvedného (např. vue-router).
Tvorba pluginu
Abychom lépe pochopili, jak vlastní Vue.js pluginy vytvářet, vytvoříme velmi zjednodušenou verzi pluginu, který zobrazuje překladové i18n
(zkratka pro Internationalization) řetězce.
Začněme nastavením objektu pluginu. Doporučujeme jej vytvořit v samostatném souboru a exportovat ho, jak je uvedeno níže, aby byla logika uzavřená a oddělená.
js
// plugins/i18n.js
export default {
install: (app, options) => {
// kód pluginu bude zde
}
}
Chceme vytvořit překladovou funkci. Tato funkce obdrží string key
s tečkovým oddělovačem, který použijeme k vyhledání přeloženého textu v možnostech zadaných uživatelem. Toto je zamýšlené použití v šablonách:
template
<h1>{{ $translate('greetings.hello') }}</h1>
Protože by tato funkce měla být dostupná globálně ve všech šablonách, vytvoříme ji tak, že ji v našem pluginu připojíme k app.config.globalProperties
:
js
// plugins/i18n.js
export default {
install: (app, options) => {
// vložit globálně dostupnou funkci `$translate()`
app.config.globalProperties.$translate = (key) => {
// získat proměnnou vnořenou v `options`
// při použití `key` jako cesty
return key.split('.').reduce((o, i) => {
if (o) return o[i]
}, options)
}
}
}
Naše funkce $translate
přijme string jako např. greetings.hello
, podívá se do konfigurace poskytnuté uživatelem a vrátí přeloženou hodnotu.
Objekt obsahující přeložené klíče by měl být předán pluginu během instalace prostřednictvím dodatečných parametrů v app.use()
:
js
import i18nPlugin from './plugins/i18n'
app.use(i18nPlugin, {
greetings: {
hello: 'Bonjour!'
}
})
Nyní bude naše volání $translate('greetings.hello')
za běhu nahrazeno textem Bonjour!
.
Viz také: Obohacování globálních vlastností
TIP
Globální vlastnosti používejte jen zřídka. Pokud se v aplikaci používá příliš mnoho globálních promněných vložených různými pluginy, může se rychle stát nepřehlednou.
Provide / Inject spolu s pluginy
Pluginy nám také umožňují použít inject
k poskytování funkce nebo parametru uživatelům pluginu. Například můžeme aplikaci umožnit přístup k parametru options
, aby mohla používat objekt s překlady.
js
// plugins/i18n.js
export default {
install: (app, options) => {
app.provide('i18n', options)
}
}
Uživatelé pluginu nyní budou schopni vložit options
pluginu do svých komponent pomocí klíče i18n
:
vue
<script setup>
import { inject } from 'vue'
const i18n = inject('i18n')
console.log(i18n.greetings.hello)
</script>
Balíček pro NPM
Pokud chcete svůj plugin sestavit a publikovat pro použití ostatním, podívejte se na sekci Library Mode v dokumentaci pro Vite.