Aujourd'hui, j'ai été confronté à une situation Typescript complexe liée à une bibliothèque, des fichiers .d.ts et des chemins relatifs.
Nous publions une bibliothèque de composants React (y compris les types) sur npm.
Nos projets front-end incluent cette bibliothèque comme tout autre package npm.
Habituellement, nos projets front-end ont dans leur tsconfig.json l'option "skipLibCheck: true"
Une de nos applications n'avait pas ce drapeau (par défaut, ce drapeau est désactivé et honnêtement, je ne comprends pas qui voudrait ce comportement)
le fait est que le drapeau n'était pas là et nous obtenions une erreur ts :
Et c'était une erreur légitime : le fichier distribué de notre bibliothèque essayait d'importer quelque chose à partir d'un chemin absolu
import { Foo } from 'absolutePath';
cette ligne a du sens dans la bibliothèque elle-même mais pas dans node_modules/bla/bla/bla
C'est vrai : est-ce que ce Chemin absolu est ici avec nous ?
En creusant dans le dossier dist/, j'ai vérifié que certains fichiers de composants résultants étaient correctement transpilés en utilisant des chemins relatifs :
MOMENT DE PANIQUE : Pourquoi certains fichiers .d.ts transpilés utilisent des chemins absolus tandis que d'autres utilisent des chemins relatifs ????
Plusieurs articles et problèmes de Stack Overflow, fils de discussion et discussions sur GitHub plus tard (j'ignorerai ce qui n'a pas fonctionné)
J'ai remarqué cet avertissement d'invitation au moment de la construction :
Export of «module» was reexported through «file» while both modules are dependencies of each other and will end up in different chunks by Rollup.
donc... Dépendances circulaires ça l'est.
J'ai résolu les dépendances circulaires dans nos instructions d'importation et tout va bien maintenant.
Si vous rencontrez des problèmes avec Ts ? transpiler les instructions de chemin absolu au lieu des chemins relatifs dans votre bibliothèque,
ce qui entraîne une erreur Ts dans l'application client, cela pourrait être dû à une dépendance circulaire dans votre code source.
--
merci d'avoir lu
Mon fil de discussion original chez X
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!