Skip to main content

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-addon

Structure 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-addon

Ceci 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: TestAPI

Defines a test case with a given name and test function. The test function can optionally be configured with test options.

@paramname - The name of the test or a function that will be used as a test name.
@paramoptionsOrFn - Optional. The test options or the test function if no explicit name is provided.
@paramoptionsOrTest - Optional. The test function or options, depending on the previous parameters.
@throwsError If called inside another test function.
@examplets // Define a simple test test('should add two numbers', () => { expect(add(1, 2)).toBe(3); });
@examplets // Define a test with options test('should subtract two numbers', { retry: 3 }, () => { expect(subtract(5, 2)).toBe(3); });
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.

@paramname - The name of the test or a function that will be used as a test name.
@paramoptionsOrFn - Optional. The test options or the test function if no explicit name is provided.
@paramoptionsOrTest - Optional. The test function or options, depending on the previous parameters.
@throwsError If called inside another test function.
@examplets // Define a simple test test('should add two numbers', () => { expect(add(1, 2)).toBe(3); });
@examplets // Define a test with options test('should subtract two numbers', { retry: 3 }, () => { expect(subtract(5, 2)).toBe(3); });
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) => void

Used 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.

@exampleexpect(items).toContain('apple'); expect(numbers).toContain(5);
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-add afin 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 :

  1. Export par défaut (recommandé pour les paquets dédiés à un add-on) :

    {
    	"exports": {
    		".": "./dist/index.js"
    	}
    }
  2. 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/sv en tant que nom du paquet. Les utilisateurs et utilisatrices peuvent alors l’installer avec uniquement npx 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

précédent suivant