Maison >interface Web >js tutoriel >Utilisation d'ExtendableError dans le package d'erreurs des ensembles de modifications

Utilisation d'ExtendableError dans le package d'erreurs des ensembles de modifications

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-10 15:40:10500parcourir

Cette importation se trouve à la ligne n°2 dans le code source du package CLI Changesets

import { ExitError, InternalError } from "@changesets/errors";

Vous apprendrez les concepts ci-dessous :

1. Package ExtendableError

2. SortieErreur

3. Erreur interne

ExtendableError usage in changesets errors package

Erreur extensible

Vous constaterez qu'ExitError étend ExtendableError.

J'ai supposé qu'ExtendableError était probablement une autre classe définie dans le même fichier, ce n'était pas le cas.

ExtendableError usage in changesets errors package

Il est importé depuis extendable-error. Qu'est-ce que c'est ?

Une simple classe d'erreur abstraite extensible qui étend Error, qui gère le nom de l'erreur, le message et la propriété de la pile.

Installer

npm install extendable-error - save

Utilisation

Cet exemple d'utilisation tiré de la documentation.

import ExtendableError from 'extendable-error';

class SomeError extends ExtendableError {
 constructor(
 message: string,
 public code: number
 ) {
 super(message);
 }
}

let someError = new SomeError('Some error', 0x0001);

Le but d'ExtendableError est de créer des classes d'erreur personnalisées en JavaScript

avec un comportement cohérent pour la gestion des erreurs. ExtendableError préserve la pile et le nom des erreurs.

Extension d'ExtendableError vs Extension d'erreur

J'ai demandé à ChatGPT de répertorier les différences entre l'extension d'ExtendableError et l'extension d'Error directement et ci-dessous est sélectionné dans la réponse de ChatGPT :

  1. Incompatibilité de propriété de nom (dans certains environnements) :
  • Héritage direct des erreurs : dans certains environnements JavaScript plus anciens (par exemple, les anciennes versions de Node.js ou certains environnements sans navigateur), si vous étendez directement Error, la propriété name peut ne pas toujours être correctement définie sur le nom. de la classe d'erreur (par exemple, ValidationError).

  • ExtendableError : il définit explicitement this.name = this.constructor.name;, ce qui garantit que la propriété name est définie correctement dans tous les environnements, même si l'environnement ne se comporte pas correctement

    avec héritage d'erreur.

2. Fiabilité de la trace de la pile :

  • Héritage direct des erreurs : dans certains environnements, en particulier Node.js, l'utilisation de Error.captureStackTrace directement dans votre classe d'erreur personnalisée garantit que la trace de la pile pointe vers la classe d'erreur personnalisée. Si vous

    ne l'utilisez pas, la trace de la pile pourrait ne pas se comporter comme prévu et afficher le mauvais emplacement dans la pile d'appels.

  • ExtendableError : en utilisant Error.captureStackTrace, ExtendableError garantit que la trace de la pile est correctement générée, pointant vers l'emplacement où l'erreur a été générée. Ceci est critique dans les environnements

    comme Node.js où le débogage dépend davantage des traces de pile.

Erreur de sortie

Le code ci-dessous est extrait du package d'erreurs Changesets

import { ExitError, InternalError } from "@changesets/errors";

Erreur interne

Le code ci-dessous est extrait du package d'erreurs Changets

npm install extendable-error - save

À propos de nous :

Chez Thinkthroo, nous étudions les grands projets open source et fournissons des guides architecturaux. Nous avons développé des composants réutilisables, construits avec tailwind, que vous pouvez utiliser dans votre projet. Nous proposons des services de développement Next.js, React et Node.

Prenez rendez-vous avec nous pour discuter de votre projet.

ExtendableError usage in changesets errors package

Références :

  1. https://github.com/changesets/changesets/blob/main/packages/cli/src/index.ts#L9

  2. https://github.com/changesets/changesets/blob/main/packages/errors/src/index.ts#L13

  3. https://www.npmjs.com/package/extendable-error

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn