En général, vous n'interagirez pas directement avec le compilateur Svelte, mais vous l'intègrerez plutôt dans un processus de build à travers un plugin de bundler. Le plugin que l'équipe Svelte recommande et avec lequel elle travaille est vite-plugin-svelte. Le framework SvelteKit fournit une configuration de vite-plugin-svelte
qui permet de compiler des applications et de packager des librairies de composants Svelte. Svelte Society maintient des plugins pour d'autres bundlers (notamment Rollup et Webpack).
Néanmoins, il est utile de comprendre comment utiliser le compilateur, puisque les plugins exposent généralement des options.
compilepermalink
ts
function compile(source: string,
C'est ici que la magie opère. svelte.compile
convertit le code source des composants en module JavaScript qui exporte des classes.
ts
import {compile } from 'svelte/compiler';constresult =compile (source , {// options});
Référez-vous à la section CompilerOptions pour voir les options disponibles.
L'objet retourné result
contient le code du composant, ainsi que des métadonnées utiles.
ts
const {js ,css ,ast ,warnings ,vars ,stats } =compile (source );
Référez-vous à la section CompilerResult pour une description du résultat compilé.
parsepermalink
ts
function parse(template: string,options?: ParserOptions): Ast;
La méthode parse
convertit un composant pour retourner son arbre de la syntaxe abstraite (AST). Contrairement à la compilation avec l'option generate: false
, aucune validation ni analyse n'est effectuée. Notez que l'AST n'est pas considéré comme une API publique ; des changements critiques pourraient survenir à n'importe quel moment.
ts
import {parse } from 'svelte/compiler';constast =parse (source , {filename : 'App.svelte' });
preprocesspermalink
ts
function preprocess(source: string,options?:| {filename?: string | undefined;}| undefined
Un certain nombre de plugins de pré-processeur maintenus par la communauté est disponible pour vous permettre d'utiliser Svelte avec des outils comme TypeScript, PostCSS, SCSS, et Less.
Vous pouvez écrire votre propre pré-processeur en utilisant l'API `svelte.
La fonction preprocess
fournit des framework pour transformer le code source d'un composant selon vos besoins. Par exemple, elle peut convertir un bloc <style lang="sass">
en css natif.
Le premier argument est le code source du composant lui-même. Le second argument est un tableau de pré-processeurs (ou éventuellement un seul pré-processeur si vous n'en avez qu'un). Un pré-processeur est un objet contenant trois fonctions : markup
, script
et style
, toutes optionnelles.
La fonction markup
reçoit en argument le markup du composant, et le nom du composant filename
s'il était spécifié comme troisième argument.
Les fonctions script
et style
reçoivent le contenu des blocs <script>
et <style>
respectivement (content
) ainsi que toute la source textuelle (markup
) du composant. En plus du nom du fichier filename
, elles reçoivent un objet contenant les attributs de l'élément.
Chaque fonction markup
, script
et style
doit retourner un objet (ou une Promesse qui résout un objet) contenant un attribut code
, représentant le code source transformé. Ces fonctions peuvent aussi renvoyer un tableau facultatif de dépendances dependencies
qui représente les fichiers dont les changements sont à surveiller, ainsi qu'un objet map
qui est une sourcemap renvoyant la transformation vers le code d'origine.
Les pré-processeurs script
et style
peuvent de manière optionnelle renvoyer un ensemble d'attributs qui représentent les attributs mis à jour sur les balises <script>
/<style>
.
Les fonctions de preprocessing doivent également retourner un objet
map
en plus decode
etdependencies
, oùmap
correspond à la sourcemap de la transformation.
ts
import {preprocess } from 'svelte/compiler';importMagicString from 'magic-string';const {code } = awaitpreprocess (source ,{markup : ({content ,filename }) => {constpos =content .indexOf ('foo');if (pos < 0) {return {code :content };}consts = newMagicString (content , {filename });s .overwrite (pos ,pos + 3, 'bar', {storeName : true });return {code :s .toString (),map :s .generateMap ()};}},{filename : 'App.svelte'});
Si un tableau de dépendances dependencies
est retourné, il sera inclus dans l'objet retourné. Ce tableau est utilisé par des librairies comme rollup-plugin-svelte pour surveiller les changements dans les fichiers, par exemple si un bloc <style>
contient un import de type @import
.
ts
import {preprocess } from 'svelte/compiler';importMagicString from 'magic-string';importsass from 'sass';import {dirname } from 'path';const {code } = awaitpreprocess (source ,{name : 'my-fancy-preprocessor',markup : ({content ,filename }) => {// renvoie le code tel quel quand aucune string foo n'est présenteconstpos =content .indexOf ('foo');if (pos < 0) {return;}// Remplace foo par bar en utilisant MagicString qui fournit// une sourcemap en plus du code modifiéconsts = newMagicString (content , {filename });Property 'css' does not exist on type 'unknown'.Property 'stats' does not exist on type 'unknown'.2339s .overwrite ( pos ,pos + 3, 'bar', {storeName : true });
2339Property 'css' does not exist on type 'unknown'.Property 'stats' does not exist on type 'unknown'.return {code :s .toString (),map :s .generateMap ({hires : true,file :filename })};Argument of type 'string | undefined' is not assignable to parameter of type 'string'. Type 'undefined' is not assignable to type 'string'.2345Argument of type 'string | undefined' is not assignable to parameter of type 'string'. Type 'undefined' is not assignable to type 'string'.},style : async ({content ,attributes ,filename }) => {// traite uniquement <style lang="sass">if (attributes .lang !== 'sass') return;const {css ,stats } = await newPromise ((resolve ,reject ) =>sass .render ({file :filename ,data :content ,includePaths : [dirname (filename )]},(err ,result ) => {if (err )reject (err );elseresolve (result );}));// supprime l'attribut lang de la balise <style>deleteattributes .lang ;return {code :css .toString (),dependencies :stats .includedFiles ,attributes };}},{filename : 'App.svelte'});
Plusieurs pré-processeurs peuvent être utilisés ensemble. La sortie du premier devient l'argument du second. Les fonctions sont exécutées dans l'ordre suivant : markup
, script
puis style
.
En Svelte 3, toutes les fonctions
markup
étaient exécutées en premier, puis toutes les fonctionsscript
et enfin toutes les fonctionsstyle
. Cet ordre a été changé dans Svelte 4.
ts
import {preprocess } from 'svelte/compiler';const {code } = awaitpreprocess (source , [{name : 'premier pré-processeur',markup : () => {console .log ('ceci est éxécuté en premier');},script : () => {console .log ('ça en second');},style : () => {console .log ('ça en troisième');}},{name : 'second pré-processeur',markup : () => {console .log ('ça en quatrième');},script : () => {console .log ('ça en cinquième');},style : () => {console .log ('ça en sixième');}}], {filename : 'App.svelte'});
walkpermalink
La fonction walk
fournit un un moyen de parcourir les arbres AST générés par le parser, en utilisant l'utilitaire estree-walker du compilateur.
La fonction prend comme argument l'arbre AST à traiter et un objet contenant 2 méthodes facultatives : enter
et leave
. enter
est appelée pour chaque noeud (si la méthode est définie). Puis, à moins que this.skip()
n'ait été appelée lors de l'exécution de enter
, chaque enfant est également traversé. Enfin, la méthode leave
est appelée pour le noeud actuel.
ts
import {walk } from 'svelte/compiler';walk (ast , {enter (node ,parent ,prop ,index ) {faire_quelque_chose (node );if (doit_ignorer_les_enfants (node )) {this.skip ();}},leave (node ,parent ,prop ,index ) {faire_autre_chose (node );}});
VERSIONpermalink
ts
const VERSION: string;
La version actuelle, définie dans le fichier package.json
.
ts
import {VERSION } from 'svelte/compiler';console .log (`la version ${VERSION } de Svelte est en cours d'exécution`);
Typespermalink
CompileOptionspermalink
ts
interface CompileOptions {…}
ts
name?: string;
- default
'Component'
définit le nom de la classe JavaScript généré (bien que le compilateur la renomera si son nom entre en conflit avec une autre variable).
Il est normalement inféré à partir l'option filename
.
ts
filename?: string;
- default
null
utilisée pour les conseils de déboggage et les sourcemaps. Le plugin du bundler la définit automatiquement.
ts
generate?: 'dom' | 'ssr' | false;
ts
errorMode?: 'throw' | 'warn';
ts
varsReport?: 'full' | 'strict' | false;
- default
'strict'
Si "strict"
: Svelte retourne un rapport de variables ne contenant que celles qui ne sont ni globales (globals) ni internes (internals).
Si "full"
: Svelte retourne un rapport de variables avec toutes les variables détectées.
Si false
: aucun rapport n'est retourné.
ts
sourcemap?: object | string;
- default
null
Une sourcemap initiale qui sera fusionnée dans la sourcemap finale. C'est souvent la sourcemap du pré-processeur.
ts
- default
true
Si true
, Svelte génère des sourcemaps pour les composants.
Utilisez un objet avec js
ou css
pour un contrôle plus fin de la génération des sourcemaps. Par défaut, l'option est à true
.
ts
outputFilename?: string;
- default
null
Nom de fichier utilisé pour les sourcemaps JavaScript.
ts
cssOutputFilename?: string;
- default
null
Nom de fichier utilisé pour les sourcemaps CSS.
ts
sveltePath?: string;
- default
'svelte'
L'emplacement de la librairie svelte
.
Tous les imports à svelte
ou svelte/[module]
seront modifiés en conséquence.
ts
dev?: boolean;
- default
false
If true
, entraîne l'ajout de code supplémentaire dans les composants pour effectuer des vérifications à runtime et fournir des informations de déboggage pendant les développements.
ts
accessors?: boolean;
- default
false
Si true
, des getters et setters seront générés pour les props des composants. Si false
, ils ne seront créés que pour les valeurs exportées en lecture seules (c'est-à-dire celles déclarées avec const
, class
et function
). Activer l'option de compilation customElement: true
changera la valeur par défaut de accessors
à true
.
ts
immutable?: boolean;
- default
false
Si true
, indique au compilateur que vous vous engagez à ne pas muter d'objets.
Cela permet au compilateur d'être moins conservatif lorsqu'il vérifie si une valeur a changé.
ts
hydratable?: boolean;
- default
false
Si true
, lors de la génération du code DOM, autorise l'option de runtime hydrate: true
, qui permet à un composant de mettre à jour le DOM existant sans avoir à créer un nouveau noeud.
Lors de la génération de code côté serveur (SSR), cela ajoute des marqueurs à la section <head>
pour identifier quels éléments hydrater.
ts
legacy?: boolean;
- default
false
Si true
, génère du code compatible avec IE9 et IE10, navigateurs qui ne supportent pas par exemple : element.dataset
.
ts
customElement?: boolean;
- default
false
Si true
, indique au compilateur de générer un constructeur de custom element à la place d'un composant Svelte traditionnel.
ts
tag?: string;
- default
null
Une string
qui indique à Svelte le nom à donner au custom element.
Ce doit être une chaîne composée de caractères alphanumériques avec au moins un tiret, par exemple "mon-element"
.
ts
css?: 'injected' | 'external' | 'none' | boolean;
'injected'
(anciennementtrue
): le style sera inclus dans les classes JavaScript et injecté au runtime pour les composants réellement rendus.'external'
(anciennementfalse
): le style sera renvoyé dans la propriétécss
du résultat de la compilation. La plupart des plugins Svelte de bundler définiront cette option à'external'
et utiliseront le CSS généré statiquement. Cela permet d'atteindre de meilleures performances, puisque les bundles JavaScript seront plus petits et le style généré sous forme de fichiers.css
pourra être mis en cache.'none'
: le style sera complètement ignoré et aucun CSS ne sera généré.
ts
loopGuardTimeout?: number;
- default
0
Un number
qui indique à Svelte d'arrêter une boucle si elle bloque le thread durant plus de loopGuardTimeout
ms. Utile pour éviter les boucles infinies.
Uniquement disponible lorsque dev: true
ts
namespace?: string;
- default
'html'
Le namespace de l'élément; par exemple, "mathml"
, "svg"
, "foreign"
.
ts
- default
undefined
Une fonction qui prend comme arguments { hash, css, name, filename }
et retourne un nom de classe utilisé pour le css scopé.
La fonction par défaut retourne svelte-${hash(css)}
.
ts
preserveComments?: boolean;
- default
false
Si true
, les commentaires HTML seront conservés au cours du rendu côté serveur.
Par défault, ils sont supprimés.
ts
preserveWhitespace?: boolean;
- default
false
Si true
, les caractères blancs (espaces, tabulations, ...) seront gardés tels quels, plutôt que supprimés ou fusionnés lorsque c'est possible.
ts
discloseVersion?: boolean;
- default
true
Si true
, expose la version majeure de Svelte dans l'objet global window
du navigateur.
CompileResultpermalink
La forme de ce que renvoie compile
du svelte/compiler
ts
interface CompileResult {…}
ts
js: {…}
Le code JavaScript généré après compilation du composant
ts
code: string;
Code en tant que string
ts
map: any;
Une sourcemap
ts
css: CssResult;
Le code CSS généré après compilation du composant
ts
ast: Ast;
L'arbre AST représentant la structure du composant
ts
warnings: Warning[];
Un tableau de warnings générés pendant la compilation. Chaque warning possède les attributs suivants :
code
: unestring
identifiant la catégorie du warningmessage
: décrit le problème de manière intelligiblestart
etend
: si le warning est relevé à un endroit particulier, ce sont des objets avec les propriétésline
,column
etcharacter
frame
: si pertinent, correspond à du texte précisant l'emplacement du code concerné, avec le numéro de ligne
ts
vars: Var[];
Un tableau reprenant les objets déclarés dans le composant et utilisés par l'écosystème (comme le plugin Svelte ESLint) pour inféré plus d'informations
ts
stats: {timings: {total: number;};};
Objet utilisé par l'équipe de développement de Svelte pour diagnostiquer le compilateur. Évitez de vous en servir car il pourrait changer à tout moment !
CssHashGetterpermalink
ts
type CssHashGetter = (args: {name: string;filename: string | undefined;css: string;hash: (input: string) => string;}) => string;
EnableSourcemappermalink
ts
type EnableSourcemap =| boolean| { js: boolean; css: boolean };
MarkupPreprocessorpermalink
A markup preprocessor that takes a string of code and returns a processed version.
ts
Preprocessorpermalink
A script/style preprocessor that takes a string of code and returns a processed version.
ts
type Preprocessor = (options: {/*** The script/style tag content*/content: string;/*** The attributes on the script/style tag*/attributes: Record<string, string | boolean>;/*** The whole Svelte file content*/markup: string;/*** The filename of the Svelte file*/filename?: string;
PreprocessorGrouppermalink
A preprocessor group is a set of preprocessors that are applied to a Svelte file.
ts
interface PreprocessorGroup {…}
ts
name?: string;
Name of the preprocessor. Will be a required option in the next major version
ts
ts
ts
Processedpermalink
The result of a preprocessor run. If the preprocessor does not return a result, it is assumed that the code is unchanged.
ts
interface Processed {…}
ts
code: string;
The new code
ts
map?: string | object;
A source map mapping back to the original code
ts
dependencies?: string[];
A list of additional files to watch for changes
ts
attributes?: Record<string, string | boolean>;
Only for script/style preprocessors: The updated attributes to set on the tag. If undefined, attributes stay unchanged.
ts
toString?: () => string;
SveltePreprocessorpermalink
Utility type to extract the type of a preprocessor from a preprocessor group
ts
interface SveltePreprocessor<Options = any> {…}
ts