FormKit est livré avec de nombreuses fonctionnalités dès le départ. C'est idéal pour commencer, mais le defaultConfig
peut inclure des fonctionnalités et des entrées que vous n'utilisez pas. Dans ce guide, nous allons apprendre à alléger notre installation de FormKit pour la production.
La plupart des utilisateurs de FormKit commencent par utiliser le defaultConfig
fourni — mais que contient-il réellement ?
@formkit/validation
avec toutes les règles.@formkit/i18n
avec la locale en
(plus toutes les locales supplémentaires que vous avez ajoutées).@formkit/inputs
avec tous les inputs non-pro.@formkit/theme
avec des icônes chargées via CDN, ou toutes icônes explicitement chargées.@formkit/vue
pour permettre à FormKit d'interagir avec Vue.@formkit/dev
(fournit des messages d'erreur lisibles par l'homme en développement).Le defaultConfig
expose également une syntaxe d'objet pratique pour fournir des options de configuration pour tous les plugins ci-dessus. Par exemple, pour fournir une entrée au plugin @formkit/inputs
lors de l'instanciation, le config par défaut vous permet de passer une propriété inputs
:
app.use(plugin, defaultConfig({
inputs: {
myInput: createInput(/* options de l'entrée */)
}
}))
Pour plus de détails, consultez le code source du defaultConfig
.
Lors de l'optimisation de votre installation de FormKit pour la production, vous voudrez peut-être créer une configuration personnalisée. Cela vous permettra d'inclure uniquement les fonctionnalités, entrées, règles et messages que vous utilisez réellement.
Par exemple, considérez un projet avec un formulaire simple qui n'utilise qu'une entrée de texte et la règle required
. Quelque chose comme ceci :
<script setup>
async function submit () {
// ... soumettre les choses
}
</script>
<template>
<FormKit
type="form"
@submit="submit"
>
<FormKit
type="text"
name="name"
label="Nom"
help="Comment les gens vous appellent-ils ?"
validation="required"
/>
</FormKit>
</template>
Dans ce cas, nous voulons uniquement utiliser la règle singulière required
, seulement l'entrée text
, et seulement le message required
en anglais et en allemand. Nous pouvons créer cette configuration personnalisée élagable en n'utilisant pas le defaultConfig
et en effectuant nos propres instantiations de plugins :
// fichier : main.ts
import { createApp } from 'vue'
import App from './App.vue'
import type { FormKitOptions } from '@formkit/core'
import { plugin, bindings } from '@formkit/vue'
import { createValidationPlugin } from '@formkit/validation'
import { required } from '@formkit/rules'
import { createI18nPlugin, en, de } from '@formkit/i18n'
import { createLibraryPlugin, text, form, submit } from '@formkit/inputs'
const library = createLibraryPlugin({ text, form, submit })
const validation = createValidationPlugin({ required })
const i18n = createI18nPlugin({ en, de })
const app = createApp(App)
app.use(plugin, {
plugins: [library, validation, i18n, bindings]
})
Si vous utilisez le module @formkit/nuxt
, vous pouvez choisir de ne pas utiliser la defaultConfig
en fournissant l'option defaultConfig: false
au module :
export default defineNuxtConfig({
modules: ['@formkit/nuxt'],
formkit: {
autoImport: true,
defaultConfig: false
}
})
Ensuite, votre formkit.config.ts
doit fournir une configuration personnalisée complète :
import type { FormKitOptions } from '@formkit/core'
import { bindings } from '@formkit/vue'
import { createValidationPlugin } from '@formkit/validation'
import { required } from '@formkit/rules'
import { createI18nPlugin, en, de } from '@formkit/i18n'
import { createLibraryPlugin, text, form, submit } from '@formkit/inputs'
const library = createLibraryPlugin({ text, form, submit })
const validation = createValidationPlugin({ required })
const i18n = createI18nPlugin({ en, de })
export default {
plugins: [library, validation, i18n, bindings]
} satisfies FormKitOptions
Dans les exemples ci-dessus, nous importons les locales en
et de
. Celles-ci incluent des messages qui ne sont pas utilisés dans notre exemple. Au lieu de cela, nous aurions pu fournir directement nos propres messages personnalisés :
createI18nPlugin({
en: {
validation: {
required: 'This field is required'
},
ui: {
submit: 'Submit'
}
},
de: {
validation: {
required: 'Dieses Feld ist erforderlich'
},
ui: {
submit: 'Einreichen'
}
}
})
L'architecture des plugins de Vue est intrinsèquement globale. Le plugin
dans @formkit/vue
ne fait pas exception ; cependant, cette commodité a un coût — FormKit sera chargé partout où Vue est chargé, même s'il n'est pas utilisé sur la page.
Heureusement pour les utilisateurs de Nuxt, le module @formkit/nuxt
fournit une solution à ce problème : autoImport: true
. Cette option injectera automatiquement FormKit et sa configuration uniquement sur les pages où il est utilisé.
Les utilisateurs de Vite peuvent également tirer parti de l'injection automatique en utilisant unplugin-formkit.
Pour les utilisateurs d'autres outils de build ou pour des cas d'utilisation qui ne s'intègrent pas bien dans les fonctionnalités prises en charge par unplugin-formkit
, l'utilisation du composant <FormKitProvider>
vous permet de fournir une configuration globale à vos entrées FormKit au point d'utilisation. Il suffit d'entourer vos composants avec <FormKitProvider>
et de fournir une prop config
:
<script setup>
import { FormKitProvider } from '@formkit/vue'
import type { FormKitOptions } from "@formkit/core"
const formKitConfig: FormKitOptions = {
// ... votre config personnalisée
}
</script>
<template>
<FormKitProvider :config="formKitConfig">
<!-- vos composants FormKit (peuvent être profondément imbriqués) -->
</FormKitProvider>
</template>