Configuration
La configuration de votre projet est définie dans un fichier svelte.config.js
à la racine de votre
projet. Comme c’est le cas pour SvelteKit, cet objet de configuration est utilisé par d’autres
outillages s’intégrant avec Svelte comme les extensions d’éditeur.
import const adapter: () => import("@sveltejs/kit").Adapter
adapter from '@sveltejs/adapter-auto';
/** @type {import('@sveltejs/kit').Config} */
const const config: Config
config = {
Config.kit?: KitConfig | undefined
SvelteKit options
kit: {
KitConfig.adapter?: Adapter | undefined
Your adapter is run when executing vite build
. It determines how the output is converted for different platforms.
adapter: function adapter(): import("@sveltejs/kit").Adapter
adapter()
}
};
export default const config: Config
config;
Config
Une extension des options de
vite-plugin-svelte
.
interface Config extends SvelteConfig {…}
kit?: KitConfig;
Les options de SvelteKit.
[key: string]: any;
Toute option additionnelle requise par de l’outillage s’intégrant avec Svelte.
KitConfig
La propriété kit
configure SvelteKit, et peut avoir les propriétés suivantes :
adapter
- par défaut
undefined
Votre adaptateur est exécuté lorsque vous lancez vite build
. Il détermine
comment la sortie de compilation est convertie pour les différentes plateformes.
alias
- par défaut
{}
Un objet contenant zéro alias ou plus utilisés pour remplacer les valeurs dans les déclarations
d’import
. Ces alias sont automatiquement passés à Vite et TypeScript.
/** @type {import('@sveltejs/kit').Config} */
const const config: {
kit: {
alias: {
'my-file': string;
'my-directory': string;
'my-directory/*': string;
};
};
}
config = {
kit: {
alias: {
'my-file': string;
'my-directory': string;
'my-directory/*': string;
};
}
kit: {
alias: {
'my-file': string;
'my-directory': string;
'my-directory/*': string;
}
alias: {
// ceci va matcher un fichier
'my-file': 'path/to/my-file.js',
// ceci va matcher un dossier et son contenu
// (`my-directory/x` est résolu en `path/to/my-directory/x`)
'my-directory': 'path/to/my-directory',
// un alias se terminant par /* va uniquement
// matcher le contenu d'un dossier, par le dossier lui-même
'my-directory/*': 'path/to/my-directory/*'
}
}
};
L’alias intégré
$lib
est contrôlé parconfig.kit.files.lib
puisqu’il est utilisé pour le packaging.
Vous aurez besoin d’exécuter
npm run dev
pour que SvelteKit génère automatiquement la configuration d’alias dansjsconfig.json
outsconfig.json
.
appDir
- par défaut
"_app"
Le dossier où SvelteKit garde ses affaires, incluant les assets statiques (comme les fichiers JS et CSS) et les routes utilisées en interne.
Si paths.assets
est précisé, il y aura donc deux dossiers d’applications —
${paths.assets}/${appDir}
et ${paths.base}/${appDir}
.
csp
La configuration des Content Security Policy. Les CSP aident à protéger vos utilisateurs contre les attaques de type “cross-site scripting” (XSS), en limitant les endroits depuis lesquelles les ressources peuvent être chargées. Par exemple, une configuration comme celle-ci...
/** @type {import('@sveltejs/kit').Config} */
const const config: {
kit: {
csp: {
directives: {
'script-src': string[];
};
reportOnly: {
'script-src': string[];
'report-uri': string[];
};
};
};
}
config = {
kit: {
csp: {
directives: {
'script-src': string[];
};
reportOnly: {
'script-src': string[];
'report-uri': string[];
};
};
}
kit: {
csp: {
directives: {
'script-src': string[];
};
reportOnly: {
'script-src': string[];
'report-uri': string[];
};
}csp: {
directives: {
'script-src': string[];
}directives: {
'script-src': ['self']
},
// doit être précisé avec soit la directive `report-uri`, soit la direction `report-to`, ou
// les deux
reportOnly: {
'script-src': string[];
'report-uri': string[];
}reportOnly: {
'script-src': ['self'],
'report-uri': ['/']
}
}
}
};
export default const config: {
kit: {
csp: {
directives: {
'script-src': string[];
};
reportOnly: {
'script-src': string[];
'report-uri': string[];
};
};
};
}config;... empêcherait les scripts d’être chargés depuis des sites externes. SvelteKit va augmenter les
directives spécifiées avec des nonces ou des hashes (en fonction du mode
) pour tout style ou
script inliné qu’il génère.
Pour ajouter un nonce pour des scripts et des liens manuellement inclus dans src/app.html
, vous
devriez utiliser un placehodler %sveltekit.nonce%
(par exemple <script nonce="%sveltekit.nonce%">
).
Lorsque les pages sont pré-rendues, l’en-tête de CSP est ajoutée via une balise <meta http-equiv>
(notez que dans ce cas, les directives frame-ancestors
, report-ui
et sandbox
seront ignorées).
Lorsque
mode
vaut'auto'
, SvelteKit va utiliser des nonces pour les pages dynamiquement rendues et des hashes pour les pages pré-rendues. Utiliser des nonces pour les pages pré-rendues n’est pas sécurisé et donc interdit.
Notez que la plupart des transitions Svelte fonctionnent en créant un élément
<style>
inliné. Si vous en utilisez dans votre application, vous devez soit laisser la directivestyle-src
non définie, soit ajouterunsafe-inline
.
Si ce niveau de configuration est insuffisant et vous souhaitez avoir des pré-requis plus
dynamiques, vous pouvez utiliser le hook handle
pour créer
votre propre CSP.
mode?: 'hash' | 'nonce' | 'auto';
Si oui ou non utiliser des hashes ou des nonces pour restreindre les éléments <script>
et
<style>
. 'auto'
va utiliser des hashes pour les pages prérendues, et des nonces pour les pages
dynamiquement rendues.
directives?: CspDirectives;
Les directives qui seront ajoutées aux en-têtes Content-Security-Policy
.
reportOnly?: CspDirectives;
Les directives qui seront ajoutées aux en-têtes Content-Security-Policy-Report-Only
.
csrf
Protection contre les attaques de type cross-site request forgery (CSRF).
checkOrigin?: boolean;
- par défaut
true
Si oui ou non vérifier les en-têtes origin
entrantes pour les soumissions de formulaire POST
,
PUT
, PATCH
, ou DELETE
et vérifier qu’elle correspond à l’origine du serveur.
Pour permettre aux gens de faire des requêtes POST
, PUT
, PATCH
, ou DELETE
avec un
Content-Type
valant application/x-www-form-urlencoded
, multipart/form-data
, ou text/plain
vers votre application depuis d’autres origines, vous aurez besoin de désactiver cette option.
Soyez vigilant•e !
embedded
- par défaut
false
Si oui ou non l’application est embarquée dans une plus grande application. Si cette option vaut
true
, SvelteKit va ajouter ses gestionnaires d’évènement liés à la navigation (et autres) sur le
parent de %sveltekit.body%
plutôt que sur window
, et passer les params
venant du serveur
plutôt que de les inférer depuis location.pathname
.
Notez qu’il n’est généralement pas supporté d’embarquer plusieurs application SvelteKit sur la même page et d’y utiliser les fonctionnalités client de SvelteKit (les choses comme ajouter une entrée dans l’historique supposent qu’il n’y a qu’une seule instance).
env
La configuration des variables d’environnement
dir?: string;
- par défaut
"."
Le dossier dans lequel chercher des fichiers .env
.
publicPrefix?: string;
- par défaut
"PUBLIC_"
Un préfixe qui signale qu’une variable d’environnement peut être exposée de manière sans risque au
code client. Voir les sections $env/static/public
et
$env/dynamic/public
. Notez que l’option de Vite
envPrefix
doit être définie
indépendamment si vous utilisez la gestion des variables d’environnement de Vite — même
l’utilisation de cette fonctionnalité ne devrait généralement pas être nécessaire.
privatePrefix?: string;
- par défaut
""
- disponible depuis la version v1.21.0
Un préfixe qui signale qu’il est dangereux d’exposer la variable d’environnement au code client. Les
variables d’environnement ne correspondant ni au préfixe public ni au préfixe privé seront
complètement supprimées. Voir les sections $env/static/private
et
$env/dynamic/private
.
files
L’emplacement où trouver différents fichiers au sein de votre projet.
assets?: string;
- par défaut
"static"
un emplacement pour mettre des fichiers statiques qui devraient avoir des URLs stables et ne
nécessitant pas de traitement, comme favicon.ico
et manifest.json
.
hooks?: {…}
lib?: string;
- par défaut
"src/lib"
la librairie interne de votre application, accessible partout dans votre base de code en tant que
$lib
params?: string;
- par défaut
"src/params"
un dossier contenant les matchers de paramètres
routes?: string;
- par défaut
"src/routes"
les fichiers qui définissent la structure de votre application (voir la section Routing)
serviceWorker?: string;
- par défaut
"src/service-worker"
l’emplacement du point d’entrée de votre service worker (voir la section Service workers)
appTemplate?: string;
- par défaut
"src/app.html"
l’emplacement du template pour les réponses HTML
errorTemplate?: string;
- par défaut
"src/error.html"
l’emplacement du template pour les réponses d’erreur de secours
inlineStyleThreshold
- par défaut
0
Inline le CSS dans un bloc <style>
à la fin du HTML. Cette option est un nombre qui définit la
longueur maximale d’un fichier CSS en unités de code UTF-16, comme spécifié par la propriété
String.length,
à inliner. Tous les fichiers CSS nécessaires pour la page qui sont plus petits que cette valeur sont
fusionnés et inlinés en un bloc <style>
.
Ceci entraîne moins de requêtes initiales et peut améliorer votre score de First Contentful Paint. Toutefois, il génère des fichiers HTML plus lourd et réduit l’efficacité des caches de navigateur. Utilisez cette option avec prudence.
moduleExtensions
- par défaut
[".js", ".ts"]
Un tableau d’extensions de ficheirs que SvelteKit traitera comme des modules. Les fichiers avec des
extensions qui ne correspondent ni à config.extensions
ni à config.kit.moduleExtensions
seront
ignorés par le routeur.
outDir
- par défaut
".svelte-kit"
Le dossier dans lequel SvelteKit écrit des fichiers lors des modes dev
et build
. Vous devriez
exclure ce dossier de votre contrôle de version.
output
Les options liées au format de sortie de compilation
preloadStrategy?: 'modulepreload' | 'preload-js' | 'preload-mjs';
- par défaut
"modulepreload"
- disponible depuis la version v1.8.4
SvelteKit va précharger les modules JavaScript nécessaire pour la page initiale pour éviter d’importer des “cascades”, entraînant des démarrages plus rapides de votre application. Il y a trois stratégies ayant des compromis différents :
modulepreload
— utilise<link rel="modulepreload">
. Ceci fournit les meilleurs résultats pour les navigateurs basés sur Chromium, dans les versions 115+ de Firefox, et dans les versions 17+ de Safari. Cette valeur est ignorée dans les navigateurs plus anciens.preload-js
— utilise<link rel="preload">
. Empêche les cascades dans Chromium et Safari, mais Chromium va parser chaque module deux fois (une fois en tant que script, une fois en tant que module). Les modules seront requêtés deux fois par Firefox. C’est une bonne option si vous souhaitez maximiser la performance pour les utilisateurs et utilisatrices ayant un appareil iOS au prix d’une légère dégration pour les utilisateurs et utilisatrices de Chromium.preload-mjs
— utilise<link rel="preload">
mais avec l’extension.mjs
qui empêche le double parsing de Chromium. Certains serveurs web statiques vont échouer à servir des fichiers.mjs
ayant une en-têteContent-Type: application/javascript
, ce qui va provoquer le plantage de votre application. Si cela ne vous concerne pas, cette option est celle qui fournit la meilleure performance pour le grand nombre de personnes, en attendant quemodulepreload
soit plus largement supporté
bundleStrategy?: 'split' | 'single' | 'inline';
- par défaut
'split'
- disponible depuis la version v2.13.0
L’option bundleStrategy
affecte la manière dont les fichiers JavaScript et CSS de votre
application sont chargés.
- Si
'split'
, découpe l’application en plusieurs fichiers.js
/.css
afin qu’ils soient chargés en différé au fur et à mesure que l’utilisateur ou l’utilisatrice navigue sur votre application. C’est la valeur par défaut, et est recommandée pour la plupart des scénarios. - Si
'single'
, crée uniquement un bundle.js
et un fichier.css
contenant le code pour toute l’application. - Si
'inline'
, inline tout le code JavaScript et CSS de toute votre application dans le HTML. Le résultat est utilisable sans serveur (c-à-d que vous pouvez simplement ouvrir le fichier dans votre navigateur).
Lorsque vous utilisez 'split'
, vous pouvez également ajuster le comportement de bundling en
définissant
output.experimentalMinChunkSize
et output.manualChunks
dans
le champ build.rollupOptions
de
votre configuration Vite.
Si vous souhaitez inliner vos assets, vous aurez besoin de définir l’option de Vite
build.assetsInlineLimit
à
une valeur de taille appropriée, puis d’importer vos assets avec Vite.
import { function sveltekit(): Promise<Plugin$1<any>[]>
Returns the SvelteKit Vite plugins.
sveltekit } from '@sveltejs/kit/vite';
import { function defineConfig(config: UserConfig): UserConfig (+5 overloads)
Type helper to make it easier to use vite.config.ts
accepts a direct
{@link
UserConfig
}
object, or a function that returns it.
The function receives a
{@link
ConfigEnv
}
object.
defineConfig } from 'vite';
export default function defineConfig(config: UserConfig): UserConfig (+5 overloads)
Type helper to make it easier to use vite.config.ts
accepts a direct
{@link
UserConfig
}
object, or a function that returns it.
The function receives a
{@link
ConfigEnv
}
object.
defineConfig({
UserConfig.plugins?: PluginOption[] | undefined
Array of vite plugins to use.
plugins: [function sveltekit(): Promise<Plugin$1<any>[]>
Returns the SvelteKit Vite plugins.
sveltekit()],
build?: BuildEnvironmentOptions | undefined
Build specific options
build: {
// inline tous les assets importés
BuildEnvironmentOptions.assetsInlineLimit?: number | ((filePath: string, content: Buffer) => boolean | undefined) | undefined
Static asset files smaller than this number (in bytes) will be inlined as
base64 strings. If a callback is passed, a boolean can be returned to opt-in
or opt-out of inlining. If nothing is returned the default logic applies.
Default limit is 4096
(4 KiB). Set to 0
to disable.
assetsInlineLimit: var Infinity: number
Infinity
}
});
<script>
// importe l'asset avec Vite
import favicon from './favicon.png';
</script>
<svelte:head>
<!-- cet asset sera inliné en tant qu'URL en base64 -->
<link rel="icon" href={favicon} />
</svelte:head>
<script lang="ts">
// importe l'asset avec Vite
import favicon from './favicon.png';
</script>
<svelte:head>
<!-- cet asset sera inliné en tant qu'URL en base64 -->
<link rel="icon" href={favicon} />
</svelte:head>
paths
assets?: '' | `http://${string}` | `https://${string}`;
- par défaut
""
Un chemin absolu d’où les fichiers de votre application sont servis. C’est utile si vos fichiers sont servis depuis un bucket de stockage, peu importe son type.
base?: '' | `/${string}`;
- par défaut
""
Un chemin relatif à la racine qui doit commencer, mais pas finir, par /
(par ex. /base-path
), à
moins que ce soit la chaîne de caractères vide. Cette option définit l’endroit depuis lequel votre
application est servie et permet à l’application d’exister sur un chemin non-racine. Notez que vous
devez préfixer tous vos liens relatifs à la racine avec la valeur base
sinon ils pointeront vers
la racine de votre domaine, et non vers votre base
(c’est comme cela que fonctionnent les
navigateurs). Vous pouvez utiliser base
importé depuis $app/paths
pour cela : <a href="{base}/your-page">Link</a>
. Si vous vous retrouvez à écrire ceci
régulièrement, il peut être pertinent de l’extraire dans un composant réutilisable.
relative?: boolean;
- par défaut
true
- disponible depuis la version v1.9.0
Si oui ou non utiliser les chemins d’assets relatifs.
Si vaut true
, les base
et assets
importés depuis $app/paths
seront remplacés par des chemins
d’assets relatifs lors du rendu côté serveur, résultant en du HTML plus portable.
Si vaut false
, les %sveltekit.assets%
ainsi que les références aux artéfacts de compilation
seront toujours des chemins relatifs à la racine, à moins que paths.assets
ne soit une URL externe
Les pages de secours des SPA utiliseront toujours des chemins absolus, quelque soit la valeur de cette option.
Si votre application utilise un élément <base>
, vous devriez définir cette option à false
, sinon
les URLs d’asset seront résolues de manière incorrecte en utilisant l’URL <base>
plutôt que la
page courante.
Dans la version 1.0, undefined
était une valeur valide, et était utilisée par défaut. Dans ce cas,
si paths.assets
n’était pas externe, SvelteKit remplaçait %sveltekit.assets%
avec un chemin
relatif et utilisait des chemins relatifs pour référencer les artéfacts de compilation, mais base
et assets
importés depuis $app/paths
restaient tels que définis dans votre configuration.
prerender
Voir la section prerender
.
concurrency?: number;
- par défaut
1
Le nombre de pages à être pré-rendues simultanément. JavaScript n’est exécuté que sur un seul thread, mais dans des cas où la performance de pré-rendu est liée au réseau (par exemple si vous chargez du contenu depuis un CMS distant) cette option peut accélérer les choses en traitant d’autres tâches en attendant les réponses du réseau.
crawl?: boolean;
- par défaut
true
Si oui ou non SvelteKit devrait trouver des pages à pré-rendre en suivant les liens depuis les
entries
.
entries?: var Array: ArrayConstructor
Array<'*' | `/${string}`>;
- par défaut
["*"]
Un tableau de pages à pré-rendre, ou depuis lesquelles commencer à chercher (si crawl: true
). La
chaîne de caractères *
inclut toutes les routes ne contenant pas de paramètre [parameters]
requis, avec les paramètres optionnels inclus comme vides (puisque SvelteKit ne sait pas quelle
valeur ces paramètres devraient avoir).
handleHttpError?: PrerenderHttpErrorHandlerValue;
- par défaut
"fail"
- disponible depuis la version v1.15.7
Comment répondre aux erreurs HTTP rencontrées lors du pré-rendu de l’application.
'fail'
— faire échouer la compilation'ignore'
— ignorer l’échec en silence et continuer'warn'
— continuer, mais afficher un avertissement(details) => void
— un gestionnaire d’erreur personnalisé qui prend un objetdetails
ayant les propriétésstatus
,path
,referrer
,referenceType
etmessage
. Si vous utilisezthrow
depuis cette fonction, la compilation va échouer
/** @type {import('@sveltejs/kit').Config} */
const const config: {
kit: {
prerender: {
handleHttpError: ({ path, referrer, message }: {
path: any;
referrer: any;
message: any;
}) => void;
};
};
}
config = {
kit: {
prerender: {
handleHttpError: ({ path, referrer, message }: {
path: any;
referrer: any;
message: any;
}) => void;
};
}
kit: {
prerender: {
handleHttpError: ({ path, referrer, message }: {
path: any;
referrer: any;
message: any;
}) => void;
}
prerender: {
handleHttpError: ({ path, referrer, message }: {
path: any;
referrer: any;
message: any;
}) => void
handleHttpError: ({ path: any
path, referrer: any
referrer, message: any
message }) => {
// ignore un lien visant délibéremment une page 404
if (path: any
path === '/not-found' && referrer: any
referrer === '/blog/how-we-built-our-404-page') {
return;
}
// sinon faire échouer la compilation
throw new var Error: ErrorConstructor
new (message?: string, options?: ErrorOptions) => Error (+1 overload)
Error(message: any
message);
}
}
}
};handleMissingId?: PrerenderMissingIdHandlerValue;
- par défaut
"fail"
- disponible depuis la version v1.15.7
Comment répondre lorsque les liens de hash d’une page pré-rendue à une autre ne correspondent à
aucun id
sur la page de destination.
'fail'
— faire échouer la compilation'ignore'
— ignorer l’échec en silence et continuer'warn'
— continuer, mais afficher un avertissement(details) => void
— un gestionnaire d’erreur personnalisé qui prend un objetdetails
ayant les propriétéspath
,id
,referrers
, etmessage
. Si vous utilisezthrow
depuis cette fonction, la compilation va échouer
handleEntryGeneratorMismatch?: PrerenderEntryGeneratorMismatchHandlerValue;
- par défaut
"fail"
- disponible depuis la version v1.16.0
Comment répondre lorsqu’une entrée générée par l’export entries
ne correspond pas à la route
depuis laquelle elle a été générée.
'fail'
— faire échouer la compilation'ignore'
— ignorer l’échec en silence et continuer'warn'
— continuer, mais afficher un avertissement(details) => void
— un gestionnaire d’erreur personnalisé qui prend un objetdetails
ayant les propriétésgeneratedFromId
,entry
,matchedId
, etmessage
. Si vous utilisezthrow
depuis cette fonction, la compilation va échouer
var origin: string
origin?: string;
- par défaut
"http://sveltekit-prerender"
La valeur de url.origin
lors du pré-rendu ; utile s’il est incluses dans du contenu rendu.
router
type?: 'pathname' | 'hash';
- par défaut
"pathname"
- disponible depuis la version v2.14.0
Le type de routeur client à utiliser.
'pathname'
est la valeur par défaut et signifie que le chemin d’URL courant détermine la route'hash'
signifie que la route est déterminée parlocation.hash
. Dans ce cas, le SSR et le pré-rendu sont désactivés. Cette option est uniquement recommandée sipathname
n’est pas une option, par exemple parce que vous ne contrôlez pas le serveur web depuis lequel votre application est déployée. Cette option a des contre-parties : vous ne pouvez pas utiliser de rendu côté serveur (ou de facto toute logique serveur), et vous devez vous assurer que les liens dans votre application commencent tous par#/
, sans quoi ils ne fonctionneront pas. À part ces deux points, tout fonctionne exactement comme une application SvelteKit normale.
resolution?: 'client' | 'server';
- par défaut
"client"
- disponible depuis la version v2.17.0
Comment déterminer la route à charger lors d’une navigation vers une nouvelle page.
Par défaut, SvelteKit va servir un manifeste de route au navigateur.
Lors d’une navigation, ce manifeste est utilisé (au même titre que le hook reroute
, s’il existe,
pour déterminer les composants à charger et les fonctions load
exécuter.
Puisque tout se produit
sur le client, cette décision peut être prise immédiatement. La contrepartie est que le manifeste a
besoin d’être chargé et parsé avant que la première navigation puisse se produire, ce qui peut avoir
un impact si votre application contient beaucoup de routes.
De manière alternative, SvelteKit peut déterminer la route sur le serveur. Ceci signifie que pour chaque navigation vers un chemin qui n’a pas encore été visité, le serveur sera requêté pour déterminer la route. Ceci a plusieurs avantages :
- Le client n’a pas besoin de d’abord charger le manifeste de route, ce qui peut permettre des temps de chargement initiaux réduits
- La liste des routes est cachée du public
- Le serveur a une opportunité d’intercepter chaque navigation (par exemple au travers d’un middleware), permettant (par exemple) de l’A/B testing dont SvelteKit n’a pas conscience
La contrepartie est que pour les chemins non visités, la résolution va prendre un peu plus de temps (même si cela est atténué par le préchargement).
Lorsque vous utilisez une résolution de route côté serveur associée à du pré-rendu, la résolution est pré-rendue avec la route elle-même.
serviceWorker
register?: boolean;
- par défaut
true
Si oui ou non activer automatiquement le service worker, s’il existe.
files?(filepath: string
filepath: string): boolean;
- par défaut
(filename) => !/\.DS_Store/.test(filename)
Détermine quels ficheirs de votre dossier static
seront disponible dans $service-worker.files
.
typescript
config?: (config: Record<string, any>
config: type Record<K extends keyof any, T> = { [P in K]: T; }
Construct a type with a set of properties K of type T
Record<string, any>) => Record<string, any> | void;
- par défaut
(config) => config
- disponible depuis la version v1.3.0
Une fonction qui vous permet de modifier le fichier tsconfig.json
généré. Vous pouvez muter la
configuration (recommandé) ou en renvoyer une nouvelle.
Ceci est utile pour étendre un fichier tsconfig.json
partagé se trouvant à la racine d’un
monorepo, par exemple.
version
La navigation côté client peut mal fonctionner si vous déployez une nouvelle version de votre application pendant que des gens sont en train de l’utiliser. Si le code de la nouvelle page est déjà chargé, il est possible que ses données soient périmées ; si ce n’est pas le cas, le manifeste de route de l’application peut éventuellement pointer vers un fichier JavaScript qui n’existe plus. SvelteKit vous aide à résoudre ce problème via la gestion de version.
Si SvelteKit rencontre une erreur pendant le chargement d’une page et détecte qu’une nouvelle
version de l’application a été déployée (en utilisant le name
défini ici, qui vaut par défaut un
timestamp du build), il va alors se rattraper en déclenchant une navigation complète traditionnelle.
Néanmoins, toutes les navigations ne vont pas nécessairement résulter en une erreur, par exemple si
le code JavaScript de la prochaine page est déjà chargé. Si vous souhaitez toujours forcer une
navigation complète dans ce genre de situations, utilisez des méthodes comme définir la valeur de
pollInterval
puis utiliser beforeNavigate
:
<script>
import { beforeNavigate } from '$app/navigation';
import { updated } from '$app/state';
beforeNavigate(({ willUnload, to }) => {
if (updated.current && !willUnload && to?.url) {
location.href = to.url.href;
}
});
</script>
Si vous définissez pollInterval
à une valeur différente de zéro, SvelteKit va régulièrement
demander en tâche de fond au serveur s’il existe de nouvelles versions, et définir la valeur de
updated.current
à true
lorsqu’il en détecte une.
const name: void
name?: string;
La chaîne de caractères représentant la version actuelle de l’application. Si précisée, cette valeur
doit être déterministe (par ex. une référence de commit plutôt qu’un Math.random()
ou
Date.now().toString()
), et vaut par défaut un timestamp du build.
Par exemple, pour utiliser le hash du commit actuel, vous pourriez utiliser git rev-parse HEAD
:
import * as module "node:child_process"
child_process from 'node:child_process';
export default {
kit: {
version: {
name: string;
};
}
kit: {
version: {
name: string;
}
version: {
name: string
name: module "node:child_process"
child_process.function execSync(command: string): Buffer (+3 overloads)
The child_process.execSync()
method is generally identical to
{@link
exec
}
with the exception that the method will not return
until the child process has fully closed. When a timeout has been encountered
and killSignal
is sent, the method won’t return until the process has
completely exited. If the child process intercepts and handles the SIGTERM
signal and doesn’t exit, the parent process will wait until the child process
has exited.
If the process times out or has a non-zero exit code, this method will throw.
The Error
object will contain the entire result from
{@link
spawnSync
}
.
Never pass unsanitized user input to this function. Any input containing shell
metacharacters may be used to trigger arbitrary command execution.
execSync('git rev-parse HEAD').Buffer<ArrayBufferLike>.toString(encoding?: BufferEncoding, start?: number, end?: number): string
Decodes buf
to a string according to the specified character encoding inencoding
. start
and end
may be passed to decode only a subset of buf
.
If encoding
is 'utf8'
and a byte sequence in the input is not valid UTF-8,
then each invalid byte is replaced with the replacement character U+FFFD
.
The maximum length of a string instance (in UTF-16 code units) is available
as
{@link
constants.MAX_STRING_LENGTH
}
.
import { Buffer } from 'node:buffer';
const buf1 = Buffer.allocUnsafe(26);
for (let i = 0; i < 26; i++) {
// 97 is the decimal ASCII value for 'a'.
buf1[i] = i + 97;
}
console.log(buf1.toString('utf8'));
// Prints: abcdefghijklmnopqrstuvwxyz
console.log(buf1.toString('utf8', 0, 5));
// Prints: abcde
const buf2 = Buffer.from('tést');
console.log(buf2.toString('hex'));
// Prints: 74c3a97374
console.log(buf2.toString('utf8', 0, 3));
// Prints: té
console.log(buf2.toString(undefined, 0, 3));
// Prints: té
toString().String.trim(): string
Removes the leading and trailing white space and line terminator characters from a string.
trim()
}
}
};
pollInterval?: number;
- par défaut
0
L’intervalle en millisecondes utilisé pour régulièrement vérifier (via “polling”) les changements de
version. Si cette valeur vaut 0
, aucun “polling” ne se produit.
Modifier cette page sur Github llms.txt