add-on
Les add-ons communautaires sont actuellement expérimentaux. L’API peut évoluer. Ne les utilisez pas en production pour le moment !
Ce guide explique comment créer, tester, et publier des add-ons communautaires pour sv.
Démarrage rapide
La manière la plus simple de créer un add-on est d’utiliser le template d’add-on :
npx sv create --template addon my-addon
cd my-addonStructure de l’add-on
Un add-on ressemble généralement à ceci :
survolez les mots-clés dans le code pour obtenir plus de contexte
import { import defineAddondefineAddon, import defineAddonOptionsdefineAddonOptions, import parseparse, import sveltesvelte } from 'sv/core';
// Définir des options qui seront présentées à l'utilisateur (ou passées en arguments)
const const options: anyoptions = import defineAddonOptionsdefineAddonOptions()
.add('who', {
question: stringquestion: "À qui l'add-on doit-il dire bonjour ?",
type: stringtype: 'string' // boolean | number | select | multiselect
})
.build();
// la définition de votre add-on, le point d'entrée
export default import defineAddondefineAddon({
id: stringid: 'le-nom-de-l-add-on',
options: anyoptions,
// étape de préparation, vérification des prérequis et des dépendances
setup: ({ dependsOn }: {
dependsOn: any;
}) => void
setup: ({ dependsOn: anydependsOn }) => {
dependsOn: anydependsOn('tailwindcss');
},
// exécution de l'add-on
run: ({ kit, cancel, sv, options }: {
kit: any;
cancel: any;
sv: any;
options: any;
}) => any
run: ({ kit: anykit, cancel: anycancel, sv: anysv, options: anyoptions }) => {
if (!kit: anykit) return cancel: anycancel('SvelteKit est requis');
// Ajoute "Bonjour [who]" à la page racine
sv: anysv.file(kit: anykit.routesDirectory + '/+page.svelte', (content: anycontent) => {
const { const ast: anyast, const generateCode: anygenerateCode } = import parseparse.svelte(content: anycontent);
import sveltesvelte.addFragment(const ast: anyast, `<p>Bonjour ${options: anyoptions.who} !</p>`);
return const generateCode: anygenerateCode();
});
}
});Développement avec le protocole file:
Lorsque vous développez votre add-on, vous pouvez le tester localement en utilisant le protocole
file: :
# Dans votre projet test
npx sv add file:../path/to/my-addonCeci vous permet d’itérer rapidement sans publier sur npm.
Tester avec sv/testing
Le module sv/testing fournit des utilitaires pour tester votre add-on :
import { const test: TestAPIDefines a test case with a given name and test function. The test function can optionally be configured with test options.
test, const expect: ExpectStaticexpect } from 'vitest';
import { import setupTestsetupTest } from 'sv/testing';
import import addonaddon from './index.js';
test<object>(name: string | Function, fn?: TestFunction<object> | undefined, options?: number | TestCollectorOptions): void (+2 overloads)Defines a test case with a given name and test function. The test function can optionally be configured with test options.
test("ajoute un message d'accueil", async () => {
const { const content: anycontent } = await import setupTestsetupTest({
addon: anyaddon,
options: {
who: string;
}
options: { who: stringwho: 'tout le monde' },
files: {
'src/routes/+page.svelte': string;
}
files: {
'src/routes/+page.svelte': '<h1>Bonjour</h1>'
}
});
expect<any>(actual: any, message?: string): Assertion<any> (+1 overload)expect(const content: anycontent('src/routes/+page.svelte')).JestAssertion<any>.toContain: <string>(item: string) => voidUsed when you want to check that an item is in a list.
For testing the items in the list, this uses ===, a strict equality check.
toContain('Bonjour tout le monde !');
});Publier sur npm
Structure de paquet
Votre add-on doit avoir sv comme dépendance dans votre package.json :
{
"name": "@your-org/sv",
"version": "1.0.0",
"type": "module",
"exports": {
".": "./dist/index.js"
},
"dependencies": {
"sv": "^0.11.0"
},
"keywords": ["sv-add"]
}Ajoutez le mot-clé
sv-addafin que les utilisateurs et utilisatrices puissent trouver votre add-on sur npm.
Options d’export
Votre paquet peut exporter l’add-on de deux manières :
Export par défaut (recommandé pour les paquets dédiés à un add-on) :
{ "exports": { ".": "./dist/index.js" } }Export
/sv(pour les paquets qui ont d’autres fonctionnalités) :{ "exports": { ".": "./dist/main.js", "./sv": "./dist/addon.js" } }
Conventions de nommage
- Paquets scopés: Utilisez
@your-org/sven tant que nom du paquet. Les utilisateurs et utilisatrices peuvent alors l’installer avec uniquementnpx sv add @your-org. - Paquets classiques: N’importe quel nom fonctionne. Le paquet s’installera avec
npx sv add your-package-name.
Compatibilité de version
Votre add-on doit préciser la version minimale de sv requises dans le package.json. Si la
version de sv d’un utilisateur ou d’un utilisatrice a une majeure différente de celle pour
laquelle votre add-on a été conçu, ils et elles verront un avertissement de compatibilité.
Modifier cette page sur Github llms.txt