Skip to content

Commit b6df109

Browse files
bleucitronRomain Crestey
andcommitted
docs: 04-compiler (#26)
* docs: 04-compiler * docs: 04-rest --------- Co-authored-by: Romain Crestey <[email protected]>
1 parent ec991ef commit b6df109

File tree

11 files changed

+214
-179
lines changed

11 files changed

+214
-179
lines changed

documentation/docs/04-compiler-and-api/01-svelte-compiler.md

Lines changed: 42 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
title: 'svelte/compiler'
33
---
44

5-
Typically, you won't interact with the Svelte compiler directly, but will instead integrate it into your build system using a bundler plugin. The bundler plugin that the Svelte team most recommends and invests in is [vite-plugin-svelte](https://github.com/sveltejs/vite-plugin-svelte). The [SvelteKit](https://kit.svelte.dev/) framework provides a setup leveraging `vite-plugin-svelte` to build applications as well as a [tool for packaging Svelte component libraries](https://kit.svelte.dev/docs/packaging). Svelte Society maintains a list of [other bundler plugins](https://sveltesociety.dev/tools/#bundling) for additional tools like Rollup and Webpack.
5+
En général, vous n'interagirez pas directement avec le compilateur Svelte, mais vous l'intègrerez plutôt dans un processus de <span class="vo">[build](/docs/development#build)</span> à travers un <span class="vo">[plugin](/docs/development#plugin)</span> de <span class="vo">[bundler](/docs/web#bundler-packager)</span>. Le plugin que l'équipe Svelte recommande et avec lequel elle travaille est [vite-plugin-svelte](https://github.com/sveltejs/vite-plugin-svelte). Le <span class="vo">[framework](/docs/web#framework)</span> [SvelteKit](https://kit.svelte.dev/) fournit une configuration de `vite-plugin-svelte` qui permet de compiler des applications et de <span class="vo">[packager](/docs/web#bundler-packager)</span> des [librairies de composants Svelte](https://kit.svelte.dev/docs/packaging). Svelte Society maintient des [plugins](https://sveltesociety.dev/tools/#bundling) pour d'autres bundlers (notamment Rollup et Webpack).
66

7-
Nonetheless, it's useful to understand how to use the compiler, since bundler plugins generally expose compiler options to you.
7+
Néanmoins, il est utile de comprendre comment utiliser le compilateur, puisque les plugins exposent généralement des options.
88

99
## compile
1010

1111
> EXPORT_SNIPPET: svelte/compiler#compile
1212
13-
This is where the magic happens. `svelte.compile` takes your component source code, and turns it into a JavaScript module that exports a class.
13+
C'est ici que la magie opère. `svelte.compile` convertit le code source des composants en module JavaScript qui exporte des classes.
1414

1515
```js
1616
// @filename: ambient.d.ts
@@ -29,9 +29,9 @@ const result = compile(source, {
2929
});
3030
```
3131

32-
Refer to [CompileOptions](#types-compileoptions) for all the available options.
32+
Référez-vous à la section [CompilerOptions](#types-compileoptions) pour voir les options disponibles.
3333

34-
The returned `result` object contains the code for your component, along with useful bits of metadata.
34+
L'objet retourné `result` contient le code du composant, ainsi que des métadonnées utiles.
3535

3636
```ts
3737
// @filename: ambient.d.ts
@@ -47,13 +47,13 @@ import { compile } from 'svelte/compiler';
4747
const { js, css, ast, warnings, vars, stats } = compile(source);
4848
```
4949

50-
Refer to [CompileResult](#types-compileresult) for a full description of the compile result.
50+
Référez-vous à la section [CompilerResult](#types-compileresult) pour une description du résultat compilé.
5151

5252
## parse
5353

5454
> EXPORT_SNIPPET: svelte/compiler#parse
5555
56-
The `parse` function parses a component, returning only its abstract syntax tree. Unlike compiling with the `generate: false` option, this will not perform any validation or other analysis of the component beyond parsing it. Note that the returned AST is not considered public API, so breaking changes could occur at any point in time.
56+
La méthode `parse` convertit un composant pour retourner son arbre syntaxique abstrait (<span class="vo">[AST](/docs/development#ast)</span>). 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 <span class="vo">[API](/docs/development#api)</span> publique ; des changements critiques pourraient survenir à n'importe quel moment.
5757

5858
```js
5959
// @filename: ambient.d.ts
@@ -74,21 +74,22 @@ const ast = parse(source, { filename: 'App.svelte' });
7474

7575
> EXPORT_SNIPPET: svelte/compiler#preprocess
7676
77-
A number of [official and community-maintained preprocessing plugins](https://sveltesociety.dev/tools#preprocessors) are available to allow you to use Svelte with tools like TypeScript, PostCSS, SCSS, and Less.
77+
Un certain nombre de [plugins de pré-processeur maintenus par la communauté](https://sveltesociety.dev/tools#preprocessors) est disponible pour vous permettre d'utiliser Svelte avec des outils comme TypeScript, PostCSS, SCSS, et Less.
7878

79-
You can write your own preprocessor using the `svelte.preprocess` API.
79+
Vous pouvez écrire votre propre pré-processeur en utilisant l'<span class="vo">[API](/docs/development#api)</span> `svelte.
8080

81-
The `preprocess` function provides convenient hooks for arbitrarily transforming component source code. For example, it can be used to convert a `<style lang="sass">` block into vanilla CSS.
81+
La fonction `preprocess` fournit des <span class="vo">[framework](/docs/web#framework)</span> pour transformer le code source d'un composant selon vos besoins. Par exemple, elle peut convertir un bloc `<style lang="sass">` en css natif.
8282

83-
The first argument is the component source code. The second is an array of _preprocessors_ (or a single preprocessor, if you only have one), where a preprocessor is an object with a `name` which is required, and `markup`, `script` and `style` functions, each of which is optional.
83+
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.
8484

85-
The `markup` function receives the entire component source text, along with the component's `filename` if it was specified in the third argument.
85+
La fonction `markup` reçoit en argument le <span class="vo">[markup](/docs/web#markup)</span> du composant, et le nom du composant `filename` s'il était spécifié comme troisième argument.
8686

87-
The `script` and `style` functions receive the contents of `<script>` and `<style>` elements respectively (`content`) as well as the entire component source text (`markup`). In addition to `filename`, they get an object of the element's attributes.
87+
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.
8888

89-
Each `markup`, `script` or `style` function must return an object (or a Promise that resolves to an object) with a `code` property, representing the transformed source code. Optionally they can return an array of `dependencies` which represents files to watch for changes, and a `map` object which is a sourcemap mapping back the transformation to the original code. `script` and `style` preprocessors can optionally return a record of attributes which represent the updated attributes on the script/style tag.
89+
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 <span class="vo">[sourcemap](/docs/web#sourcemap)</span> renvoyant la transformation vers le code d'origine.
90+
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>`.
9091

91-
> Preprocessor functions should return a `map` object whenever possible or else debugging becomes harder as stack traces can't link to the original code correctly.
92+
> Les fonctions de <span class="vo">[preprocessing](/docs/web#preprocessing)</span> doivent également retourner un objet `map` en plus de `code` et `dependencies`, où `map` correspond à la <span class="vo">[sourcemap](/docs/web#sourcemap)</span> de la transformation.
9293
9394
```js
9495
// @filename: ambient.d.ts
@@ -125,7 +126,7 @@ const { code } = await preprocess(
125126
);
126127
```
127128

128-
If a `dependencies` array is returned, it will be included in the result object. This is used by packages like [vite-plugin-svelte](https://github.com/sveltejs/vite-plugin-svelte) and [rollup-plugin-svelte](https://github.com/sveltejs/rollup-plugin-svelte) to watch additional files for changes, in the case where your `<style>` tag has an `@import` (for example).
129+
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](https://github.com/sveltejs/rollup-plugin-svelte) pour surveiller les changements dans les fichiers, par exemple si un bloc `<style>` contient un import de type `@import`.
129130

130131
```ts
131132
// @filename: ambient.d.ts
@@ -149,14 +150,14 @@ const { code } = await preprocess(
149150
{
150151
name: 'my-fancy-preprocessor',
151152
markup: ({ content, filename }) => {
152-
// Return code as is when no foo string present
153+
// renvoie le code tel quel quand aucune string foo n'est présente
153154
const pos = content.indexOf('foo');
154155
if (pos < 0) {
155156
return;
156157
}
157158

158-
// Replace foo with bar using MagicString which provides
159-
// a source map along with the changed code
159+
// Remplace foo par bar en utilisant MagicString qui fournit
160+
// une sourcemap en plus du code modifié
160161
const s = new MagicString(content, { filename });
161162
s.overwrite(pos, pos + 3, 'bar', { storeName: true });
162163

@@ -166,7 +167,7 @@ const { code } = await preprocess(
166167
};
167168
},
168169
style: async ({ content, attributes, filename }) => {
169-
// only process <style lang="sass">
170+
// traite uniquement <style lang="sass">
170171
if (attributes.lang !== 'sass') return;
171172

172173
const { css, stats } = await new Promise((resolve, reject) =>
@@ -183,7 +184,7 @@ const { code } = await preprocess(
183184
)
184185
);
185186

186-
// remove lang attribute from style tag
187+
// supprime l'attribut lang de la balise <style>
187188
delete attributes.lang;
188189

189190
return {
@@ -199,9 +200,9 @@ const { code } = await preprocess(
199200
);
200201
```
201202

202-
Multiple preprocessors can be used together. The output of the first becomes the input to the second. Within one preprocessor, `markup` runs first, then `script` and `style`.
203+
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`.
203204

204-
> In Svelte 3, all `markup` functions ran first, then all `script` and then all `style` preprocessors. This order was changed in Svelte 4.
205+
> En Svelte 3, toutes les fonctions `markup` étaient exécutées en premier, puis toutes les fonctions `script` et enfin toutes les fonctions `style`. Cet ordre a été changé dans Svelte 4.
205206
206207
```js
207208
// @errors: 2322
@@ -218,27 +219,27 @@ import { preprocess } from 'svelte/compiler';
218219

219220
const { code } = await preprocess(source, [
220221
{
221-
name: 'first preprocessor',
222+
name: 'premier pré-processeur',
222223
markup: () => {
223-
console.log('this runs first');
224+
console.log('ceci est éxécuté en premier');
224225
},
225226
script: () => {
226-
console.log('this runs second');
227+
console.log('ça en second');
227228
},
228229
style: () => {
229-
console.log('this runs third');
230+
console.log('ça en troisième');
230231
}
231232
},
232233
{
233-
name: 'second preprocessor',
234+
name: 'second pré-processeur',
234235
markup: () => {
235-
console.log('this runs fourth');
236+
console.log('ça en quatrième');
236237
},
237238
script: () => {
238-
console.log('this runs fifth');
239+
console.log('ça en cinquième');
239240
},
240241
style: () => {
241-
console.log('this runs sixth');
242+
console.log('ça en sixième');
242243
}
243244
}
244245
], {
@@ -250,17 +251,17 @@ const { code } = await preprocess(source, [
250251

251252
> EXPORT_SNIPPET: svelte/compiler#walk
252253
253-
The `walk` function provides a way to walk the abstract syntax trees generated by the parser, using the compiler's own built-in instance of [estree-walker](https://github.com/Rich-Harris/estree-walker).
254+
La fonction `walk` fournit un un moyen de parcourir les arbres <span class="vo">[AST](/docs/development#ast)</span> générés par le <span class="vo">[parser](/docs/development#parser)</span>, en utilisant l'utilitaire [estree-walker](https://github.com/Rich-Harris/estree-walker) du compilateur.
254255

255-
The walker takes an abstract syntax tree to walk and an object with two optional methods: `enter` and `leave`. For each node, `enter` is called (if present). Then, unless `this.skip()` is called during `enter`, each of the children are traversed, and then `leave` is called on the node.
256+
La fonction prend comme argument l'arbre <span class="vo">[AST](/docs/development#ast)</span> à 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.
256257

257258
```js
258259
// @filename: ambient.d.ts
259260
declare global {
260261
var ast: import('estree').Node;
261-
function do_something(node: import('estree').Node): void;
262-
function do_something_else(node: import('estree').Node): void;
263-
function should_skip_children(node: import('estree').Node): boolean;
262+
function faire_quelque_chose(node: import('estree').Node): void;
263+
function faire_autre_chose(node: import('estree').Node): void;
264+
function doit_ignorer_les_enfants(node: import('estree').Node): boolean;
264265
}
265266

266267
export {};
@@ -272,13 +273,13 @@ import { walk } from 'svelte/compiler';
272273

273274
walk(ast, {
274275
enter(node, parent, prop, index) {
275-
do_something(node);
276-
if (should_skip_children(node)) {
276+
faire_quelque_chose(node);
277+
if (doit_ignorer_les_enfants(node)) {
277278
this.skip();
278279
}
279280
},
280281
leave(node, parent, prop, index) {
281-
do_something_else(node);
282+
faire_autre_chose(node);
282283
}
283284
});
284285
```
@@ -287,11 +288,11 @@ walk(ast, {
287288
288289
> EXPORT_SNIPPET: svelte/compiler#VERSION
289290
290-
The current version, as set in package.json.
291+
La version actuelle, définie dans le fichier `package.json`.
291292
292293
```js
293294
import { VERSION } from 'svelte/compiler';
294-
console.log(`running svelte version ${VERSION}`);
295+
console.log(`la version ${VERSION} de Svelte est en cours d'exécution`);
295296
```
296297
297298
## Types

0 commit comments

Comments
 (0)