$inspect
$inspect
ne fonctionne que lors du développement. Dans un build de production, ell n’est jamais exécutée.
La rune $inspect
est plus ou moins équivalente à console.log
, si ce n’est qu’elle va déclencher
sa ré-exécution si sont argument est mis à jour. $inspect
suit les changements d’états reactifs de
manière profonde, ce qui signifie que mettre à jour quelque chose au sein d’un objet ou d’un tableau
en utilisant la réactivité fine va déclencher sa ré-exécution
(démo).
<script>
let count = $state(0);
let message = $state('coucou');
$inspect(count, message); // sera affiché dans la console lorsque `count` ou `message` change
</script>
<button onclick={() => count++}>Incrémenter</button>
<input bind:value={message} />
$inspect(...).with
$inspect
renvoie une propriété with
, que vous pouvez exécuter avec un callback, qui sera ensuite
utilisé à la place de console.log
. Le premier argument du callback est soit "init"
ou "update"
; les arguments suivants sont les valeurs passées à $inspect
(démo)
<script>
let count = $state(0);
$inspect(count).with((type, count) => {
if (type === 'update') {
debugger; // ou `console.trace`, ou ce que vous voulez
}
});
</script>
<button onclick={() => count++}>Incrémenter</button>
Une manière pratique de trouver l’origine d’une mise à jour est de fournir console.trace
à with
:
function $inspect<[any]>(values_0: any): {
with: (fn: (type: "init" | "update", values_0: any) => void) => void;
}
namespace $inspect
Inspects one or more values whenever they, or the properties they contain, change. Example:
$inspect(someValue, someOtherValue)
$inspect
returns a with
function, which you can invoke with a callback function that
will be called with the value and the event type ('init'
or 'update'
) on every change.
By default, the values will be logged to the console.
$inspect(x).with(console.trace);
$inspect(x, y).with(() => { debugger; });
$inspect(stuff).with: (fn: (type: "init" | "update", values_0: any) => void) => void
with(var console: Console
The console
module provides a simple debugging console that is similar to the
JavaScript console mechanism provided by web browsers.
The module exports two specific components:
- A
Console
class with methods such as console.log()
, console.error()
and console.warn()
that can be used to write to any Node.js stream.
- A global
console
instance configured to write to process.stdout
and
process.stderr
. The global console
can be used without calling require('console')
.
Warning: The global console object’s methods are neither consistently
synchronous like the browser APIs they resemble, nor are they consistently
asynchronous like all other Node.js streams. See the note on process I/O
for
more information.
Example using the global console
:
console.log('hello world');
// Prints: hello world, to stdout
console.log('hello %s', 'world');
// Prints: hello world, to stdout
console.error(new Error('Whoops, something bad happened'));
// Prints error message and stack trace to stderr:
// Error: Whoops, something bad happened
// at [eval]:5:15
// at Script.runInThisContext (node:vm:132:18)
// at Object.runInThisContext (node:vm:309:38)
// at node:internal/process/execution:77:19
// at [eval]-wrapper:6:22
// at evalScript (node:internal/process/execution:76:60)
// at node:internal/main/eval_string:23:3
const name = 'Will Robinson';
console.warn(`Danger ${name}! Danger!`);
// Prints: Danger Will Robinson! Danger!, to stderr
Example using the Console
class:
const out = getStreamSomehow();
const err = getStreamSomehow();
const myConsole = new console.Console(out, err);
myConsole.log('hello world');
// Prints: hello world, to out
myConsole.log('hello %s', 'world');
// Prints: hello world, to out
myConsole.error(new Error('Whoops, something bad happened'));
// Prints: [Error: Whoops, something bad happened], to err
const name = 'Will Robinson';
myConsole.warn(`Danger ${name}! Danger!`);
// Prints: Danger Will Robinson! Danger!, to err
console.Console.trace(...data: any[]): void (+1 overload)
trace);
$inspect.trace(...)
Cette rune, ajoutée avec la version 5.14, déclenche le suivi de la fonction passée en argument. À chaque fois que la fonction est rejouée dans le cadre d’un effet ou d’une dérivation, des informations concernant les états réactifs ayant généré l’effet seront affichées dans la console.
<script>
import { faireQqch } from './ailleurs';
$effect(() => {
$inspect.trace();
faireQqch();
});
</script>
$inspect.trace
prend un argument optionnel qui peut être utilisé comme label.