6
votes

Utilisation conflictuelle de Babel / Registre

J'ai ce qui semble être un conflit dans Babel / registre code> entre deux packages NPM locaux.

Dans un paquet, je fais ce qui suit: p>

import fs from 'fs';
^^^^^^
SyntaxError: Unexpected reserved word


9 commentaires

Généralement, l'attente est que les bibliothèques seront pré-compilées avant la distribution. Babel / Registre Ne traite pas les fichiers intérieurs Node_Modules Par défaut.


Cela fait si vous suivez le modèle que je suive. Si j'excluais complètement le deuxième package, tous les modules du premier package sont enregistrés et transformés.


Je suis confus. Votre question dit si vous prenez babel / registre hors du module Test , il donne une erreur sur l'importation. C'est parce que test est dans node_modules afin qu'il ne soit pas compilé. Vous attendez-vous à l'extérieur Babel / registre pour compiler test ?


Oui, "Test" Vit dans Node_Modules , mais pourquoi ne devrait-il pas babel / registre transformer-le? Ne devrait pas babel / registre simplement compiler tout module ES6 que vous essayez de charger?


C'est ce que j'ai dit dans mon premier commentaire. Babel / Regiche Par défaut ne traite que les choses directement à l'intérieur de votre module, pas à l'intérieur nœud_modules , à moins que vous ne le dis explicitement quoi traiter. Le chargement serait bien plus lent s'il vient d'essayer de transpercer chaque fichier que vous référence. Plus tous les fichiers ne sont pas valides Modules ES6. Voir la note: .


Ah, je vois maintenant, merci. Avez-vous une suggestion sur la manière dont je devrais aller sur l'importation du deuxième paquet?


Comment test distribué? Généralement, l'attente est que les modules seront distribués comme précompilé ES5. Si vous voulez vraiment compiler après cela, vous pouvez modifier le Ignorer et / ou uniquement Regex comme link i Link i Spectacles.


Vous devriez en faire cela dans une réponse afin que je puisse l'accepter.


rencontré le même problème, avez-vous résolu cela?


3 Réponses :


2
votes

Comme vous l'avez vu, babel / registre est uniquement destiné à être exécuté une fois par application, ce qui serait généralement l'application de niveau supérieur que vous démarrez.

Le problème que vous êtes confronté est que, par défaut, exiger ('babel / registre') définira uniquement votre système pour transpercer les fichiers directement dans le module, il ne traitera pas nœud_modules . L'attente en général que tout dans nœud_modules aura été compilé à l'avance lors de la publication de votre registre de module.

Une option est de passer Ignorer: false en option, par exemple. Exiger ('Babel / Registre') ({Ignore: False}); Cependant, il s'agit généralement d'une mauvaise idée et peut conduire à d'autres problèmes. Cela rendra les fichiers de Babel Transpile tous les fichiers , mais ce n'est pas toujours une solution sûre à faire car tout le code JavaScript n'est pas garanti d'être un module ES6 valide.

La meilleure solution serait de transpercer votre module à l'avance à l'avance. Si cela ne fonctionne pas cependant, vous pouvez utiliser l'option pour spécifier une regex ou globe pour les chemins qui doivent être transformés.


0 commentaires

0
votes

L'erreur: Une seule instance de babel / polyfill est autorisée est exactement ce que @Loganfsmyth mentionné: plusieurs polyfills, qui peuvent être causés à l'aide des deux Babel-noeud et nécessitant ./ registre-babel , en même temps.

Cependant, dans mon cas, cette erreur n'était étrangement pas montrant jusqu'à ce que j'ai eu une autre erreur. Je veux dire, tout fonctionnait, alors j'ai eu une erreur EADDDRINUSE . Quand c'est arrivé, il a été ombré et l'erreur de polyfill s'est présentée. Très étrange. Je n'ai pas touché mon code dans n'importe où lié à Babel.

Une fois que j'ai corrigé le polyfill, le Eaddrinuse est arrivé et j'ai pu tout résoudre.


0 commentaires

1
votes

Dans mon cas, je suis parti avec le réglage:

self._babelPolyfill = false;


0 commentaires