76
votes

Comment corriger l'erreur "Échec de la compilation: ./node_modules/@react-leaflet/core/esm/path.js 10:41 L'analyse du module a échoué: jeton inattendu (10:41)"

J'essaie de créer une application react-typescript avec folidlet . J'ai utilisé la commande,

npm installaflet react react-lis il dit,

import React from 'react';
import './styles.css';
import L, { LatLngExpression } from "leaflet";
import "leaflet/dist/leaflet.css";
import {MapContainer, TileLayer, Marker, Popup} from 'react-leaflet';

const position : LatLngExpression = [59.91174337077401, 10.750425582038146];

export default function MapJar() {
    return (
        <MapContainer center={position} zoom={13} scrollWheelZoom={false}>
            <TileLayer
                attribution='&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
                url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
            />
            <Marker position={position}>
                <Popup>
                    A pretty CSS3 popup. <br /> Easily customizable.
                </Popup>
            </Marker>
        </MapContainer>
    );
}; 

voici mon pack > Xxx

J'ai essayé de réinstaller les dépendances plusieurs fois mais je n'ai toujours pas fonctionné.

Je comprends que c'est un problème simple et une erreur que je fais, mais cependant, j'ai pas en mesure de résoudre cette erreur.

Toute entrée est appréciée. Merci d'avance.


2 commentaires

Cela semble être un problème ouvert avec l'ARC. D'un autre côté, le module @ react-leaflet / core a une cible TSConfig de ES2019, ce qui signifie que l'opérateur ?? aurait dû être transpiré à quelque chose d'autre lorsque le package a été construit. J'envisagerais d'ouvrir un problème sur le repo React-Leaflet disant que cette ligne ne semble pas être correctement compilée à ES2019 comme le spécifie le TSConfig


Merci @sethlutske! J'ai trouvé le problème exact affiché il y a quelques heures github.com/paullecam/react-leaflet/issues / 877


18 Réponses :


-3
votes

J'ai fait face au même problème avec la dernière version de la brochure: "^ 3.2.0", mais j'ai surmonté ce problème en déclarant vers la version 2.7.0. Ici ce que vous devez faire:

  • Supprimez les Node_Modules
  • Supprimez le 'package-lock.json'
  • Changez les versions de dépliants et react-leaflet dans le "package.json" en: "react-leaflet": "^ 2.7.0" et "feuillette": "^ 1.6.0",
  • Exécutez "NPM Install"
  • Le composant MapContainer n'est pas défini dans la version 2.7.0, vous devez donc utiliser la carte à la place.
  • Ajoutez un peu de style (longueur) aux composants pour voir la carte.

1 commentaires

La rétrogradation d'une version précédente n'est pas une solution au problème spécifique spécialement pour ceux qui ont utilisé la bibliothèque pour les grands projets et il y a des changements de rupture entre les deux versions (2.x et 3.x). Que feriez-vous alors? Réécrivez tout le code à partir de zéro?



-1
votes

Détrra de "React-Leaflet": "2.7.0".


2 commentaires

C'est exactement la même réponse que quelqu'un d'autre a mis ici. Ce n'est pas du tout une solution à ce problème. Pour citer littéralement @kboul, "La rétrogradation d'une version précédente n'est pas une solution au problème spécifique spécialement pour ceux qui ont utilisé la bibliothèque pour les grands projets et il y a des changements de rupture entre les deux versions (2.x et 3.x) . Que feriez-vous alors? Réécrivez tout le code à partir de zéro? ". Le problème est à la fois avec la façon dont React-Leaflet est compilé dans son processus de construction, ainsi que la façon dont l'ARC gère l'opérateur ?? .


Il créerait également des problèmes beaucoup plus profonds, React-Leaflet 3 est complètement différent de React-Leaflet 2.



27
votes

Le problème semble finalement être lié à Create-React-App et la façon dont il regroupe les fichiers et semble être résolu si vous remplacez les cibles du navigateur de:

"browserslist": [
   ">0.2%",
  "not dead",
  "not op_mini all"
],

à

"browserslist": {
   "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
},

Ensuite, arrêtez le serveur et réacheminez-le.

Les crédits allez à bkiac Issue de github officiel de création-réact

edit

vous pouvez reproduire l'erreur et le correctif si vous téléchargez Cette boîte de codes et boîte . Lorsque vous l'ouvrez, cela fonctionne, mais si vous le téléchargez et l'exécutez localement, vous pouvez voir l'erreur en utilisant les options First BrowsersList dans package.json . Si vous arrêtez le serveur, remplacez BrowsersList par la nouvelle et réinterrisez l'application, vous pouvez voir qu'elle fonctionne comme prévu.


3 commentaires

Dans mon cas, si vous supprimez l'objet de développement, réagissez les réponses avec ce qui suit: "À partir de react-scripts> = 2, vous devez spécifier des navigateurs ciblés.". Ensuite, il sort. Quelle version de React-Scripts avez-vous?


"react-lisflet": "^ 3.2.0" et "react-scripts": "4.0.3"


Comme suggéré ci-dessous, vous devez également supprimer le cache: node_modules / .cache. Cela a fonctionné pour moi.



3
votes

Ajouter

 {
  "name": "my-app",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^5.12.0",
    "@testing-library/react": "^11.2.7",
    "@testing-library/user-event": "^12.8.3",
    "antd": "^4.15.6",
    "leaflet": "1.7.1",
    "leaflet.marker.slideto": "^0.2.0",
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    "react-leaflet": "3.0.2",
    "react-leaflet-drift-marker": "^3.0.0",
    "react-scripts": "4.0.3",
    "web-vitals": "^1.1.2"
  },
  "devDependencies": {
    "typescript": "3.8.3"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test --env=jsdom",
    "eject": "react-scripts eject"
  },
  "browserslist": [
    ">0.2%",
    "not dead",
    "not ie <= 11",
    "not op_mini all"
  ]
}


0 commentaires

96
votes

J'ai trouvé un moyen de le corriger.

étapes à corriger: -

ouvrez votre fichier package.json et modifiez votre liste de navigateurs comme suit.

"browserslist": [
   ">0.2%",
  "not dead",
  "not op_mini all"
],


6 commentaires

Avez-vous essayé de supprimer le répertoire Node_Modules / .Cache? @hoogw


J'ai essayé ceci, mais sur NPM start , j'obtiens l'invite: "Nous ne pouvons pas détecter les navigateurs cibles. Souhaitez-vous ajouter les valeurs par défaut à votre package.json?› (Y / n ) ". Si je frappe non, CRA sort avec le message "à partir de react-scripts> = 2, vous devez spécifier des navigateurs ciblés. Veuillez ajouter une clé de liste de navigateurs à votre package.json." Si je frappe oui, il écrase mon package.json à la façon dont il était, continue, puis échoue à nouveau avec le même message. Ceci est avec React-Scripts 4.0.1. Quelqu'un a-t-il rencontré cela? Des suggestions pour moi?


A travaillé pour moi, merci! rm -rf node_modules / .cache / était nécessaire .


Mon package.json ressemblait déjà à la façon dont vous le soulignez. Mon erreur, la même chose que les OP persiste ... et j'ai essayé de supprimer le dossier de cache et de supprimer entièrement Node_Modules. Cela ne fonctionne toujours pas.


Pour les navigateurs, je définis simplement BrowsersList sur ["par défaut"] . Sauf si vous avez une raison de paramètres plus restrictifs, cela fera l'affaire.


Supprimez simplement le contenu de développement "développement": []



19
votes

J'ai rencontré ce problème après avoir fait une mise à jour NPM.

Ces packages ont été installés: "react-ling": "^ 3.2.0"

et comme dépendance (trouvé dans .lock): "@ react-leaflet / core": "1.1.0",

Forcer le NPM à utiliser ces versions, l'a corrigé pour moi:

"@ react-leaflet / core": "1.0.2",

"react-lichlet": "3.1.0",

Essayez donc npm i react-lisflet@3.1.0 @ react-leaflet / core @ 1.0.2


1 commentaires

Merci @schitzelkraft! C'est la solution qui a fonctionné pour moi après de nombreuses autres tentatives. Ce que je pensais promettre était stackoverflow.com/a/67991412/558732 Mais cela n'a pas résolu mon problème.



3
votes

J'ai eu le même problème, mais toutes les solutions prévues ici ne m'ont pas convaincu. Je l'ai donc résolu de la manière suivante:

// webpack.common.js

module.exports = {
   // ... some config here
    module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        // the @react-leaflet and react-leaflet libraries must be excluded.
        exclude: /node_modules\/(?!(@react-leaflet|react-leaflet)\/)/i,
        use: []
      }
    ],
   // ... more config here
   
}

Ensuite, je l'ai ajouté aux plugins Babel dans babel.config.js

module.exports = {
  presets: [
    // ... some presets here
  ],
  plugins: [
    // ... any plugins here
    '@babel/plugin-proposal-nullish-coalescing-operator',
  ],
  env: {
    // ... your config
  },
}


1 commentaires

Je ne sais pas comment appliquer cela au livre de contes par exemple, bien qu'il semble la solution la plus raisonnable



11
votes

J'ai résolu le problème en modifiant le BrowsersList comme d'autres l'ont indiqué. My BrowsersList ressemble maintenant à ceci:

"browserslist": [
  ">0.2%",
  "not dead",
  "not op_mini all"
]

J'ai ensuite fait ce qui suit:

  1. Supprimer votre dossier node_modules
  2. Exécuter NPM Cache Clean - Force
  3. Exécuter NPM Install
  4. Maintenant, tout devrait fonctionner comme prévu. Si la carte n'est pas chargée, n'oubliez pas d'ajouter le dépliant CSS et JS à votre page et définissez la hauteur de votre contenant de la carte. Voir le documentation officielle Pour plus d'informations.


0 commentaires

0
votes

J'ai fait face au même problème en utilisant la version 3.2.0 de React-Leaflet. La solution ci-dessus a fonctionné mais je souhaite ajouter quelques détails à des fins de clarification:

"browserslist": {
"production": [
  ">0.2%",
  "not dead",
  "not op_mini all"
],
"development": [
  "last 1 chrome version",
  "last 1 firefox version",
  "last 1 safari version"
]},

notez que le code package ci-dessus doit être exact, ce qui signifie là ne sont pas {} dans le code ci-dessus après avoir supprimé:

"development": [
  "last 1 chrome version",
  "last 1 firefox version",
  "last 1 safari version"
]

de:

"browserslist": 
[
  ">0.2%",
  "not dead",
  "not op_mini all"
],


0 commentaires

3
votes

Cela ne s'applique pas directement à la question d'origine (les instructions sont destinées aux projets créés par création-application), mais j'écris toujours la réponse au cas où un utilisateur de l'ARC en plus de moi-même trébuche sur cette question.

  • Je ne voulais pas forcer l'utilisation d'une ancienne version React-Leaflet
  • Les modifications de la liste du navigateur suggérées dans quelques réponses n'ont pas fonctionné car j'utilise Create-React-App ( yarn start qui vient de me rafraîchir la configuration)
  • @ La suggestion de Wito n'a pas fonctionné directement, pour la même raison (en raison de l'utilisation de Create-React-App, il n'y a pas de contrôle direct des fichiers de configuration WebPack / Babel)
  • L'éjection de l'ARC aurait été une option, mais j'ai préféré ne pas suivre cette raison pour cette seule raison.

Ce qui a finalement fonctionné, c'était l'utilisation des deux bibliothèques react-app-wewired et react-app-wrewire-babel-loadher . Étapes nécessaires:

  1. Yarn Add -d React-App-App-React-App-Vrewire-Babel-chargedeur
  2. Modifier les noms de script dans package.json Selon les instructions de React-App-Rewired:
  3. /* config-overrides.js */
    
    const path = require("path");
    const fs = require("fs");
    const rewireBabelLoader = require("react-app-rewire-babel-loader");
     
    const appDirectory = fs.realpathSync(process.cwd());
    const resolveApp = relativePath => path.resolve(appDirectory, relativePath);
    
    module.exports = function override(config, env) {
        config = rewireBabelLoader.include(
            config,
            resolveApp("node_modules/@react-leaflet")
        );
        config = rewireBabelLoader.include(
            config,
            resolveApp("node_modules/react-leaflet")
        );
    
        return config;
    };
    
    1. Créer Config-overrides.js dans la racine du projet en fonction des instructions de React-App-Vrewire-Babel-chargedeur:
    2.   /* package.json */
      
        "scripts": {
      -   "start": "react-scripts start",
      +   "start": "react-app-rewired start",
      -   "build": "react-scripts build",
      +   "build": "react-app-rewired build",
      -   "test": "react-scripts test",
      +   "test": "react-app-rewired test",
          "eject": "react-scripts eject"
      }
      

      Et puis cela fonctionne. Fondamentalement, cela inclut React-Leaflet dans la transpilation de Babel de la même manière que la réponse de Wito fait pour les constructions non CRA.


1 commentaires

Ceci est la meilleure réponse jusqu'à présent, bien que react-app-wrewire-babel-loader soit n'est plus pris en charge .



8
votes

Le piratage de votre BrowsersList ou Downrading Packages n'est pas une solution sécurisée ou à long terme pour traiter les modules qui Ne ciblez pas une version raisonnable de js . @ La réponse de Jlahd est excellente, sauf que react-app-wewire-babel-loader est n'est plus pris en charge par son auteur. Vous pouvez atteindre le même résultat encore plus facilement avec Personnalise-cra ( que vous devriez utiliser avec l'ARC de toute façon, car c'est le seul moyen de configurer votre Politique de sécurité du contenu ) En utilisant babelinclude :

// config-overrides.js

const { babelInclude, override } = require('customize-cra');
const path = require('path');

module.exports = {
  webpack: override(
    babelInclude([
      path.resolve('src'),
      path.resolve('node_modules/@react-leaflet'),
      path.resolve('node_modules/react-leaflet')
    ])
    // and configure other stuff here like csp-html-webpack-plugin
  ),
};


6 commentaires

J'apprécie votre raisonnement et votre approche pour résoudre ce problème - les correctifs rapides que la boue avec les paramètres au lieu de résoudre un problème sous-jacent ne sont pas la voie à suivre. Je suis sur le point d'essayer cette solution et je vous ferai savoir si cela fonctionne pour moi.


Je rencontre toujours le même problème exact: "Échec de la compilation", et me montre ./ node_modules/@react-leaflet/core/esm/path.js 10:41 Parse du module Échec: jeton inattendu (10 : 41)


Une différence par rapport à l'OP est que mon fichier est traité par un chargeur différent (et cela dépasse ma compréhension à ce stade): Le fichier a été traité avec ces chargeurs: * ./Node_modules/react-scripts/node_modules/babel -loader / lib / i‌ ndex.js Vous pouvez avoir besoin d'un chargeur supplémentaire pour gérer le résultat de ces chargeurs.


Vos scripts NPM utilisent-ils React-App-Rewired au lieu de react-scripts ? J'utilise exactement le fichier ci-dessus dans l'un de mes projets internes (donc aucun truc CSP nécessaire).


Je ne les ai pas changés manuellement non. L'installation de personnalisation-CRA et de réaction-apparition les aurait-il changé? J'ai fini par aller avec la solution de @ schitzelkraft (ci-dessus, stackoverflow.com/a/67689949/558732 ) et après avoir supprimé le nœud- Modules et nettoyage du cache, les modifications de la version ont fonctionné. Je voudrais tester votre solution et m'assurer que les scripts réagis sont remplacés.


Vous devez les modifier manuellement en react-app-liwired : github.com/timarney/…



1
votes

Pour ceux qui exécutent NextJS.

Vous pouvez résoudre ce fichier WebPack 5 en activation dans le fichier Next.config.js.

const nextConfig = {
  future: {
    webpack5: true,
  },
};

module.exports = nextConfig;

Merci à ce commentaire de Marcin-Piechaczek: https://github.com/paullecam/reactleaflet/issues/ 883 # émetteur-849126348

J'ai obtenu cette erreur après la mise à niveau de React-Leaflet vers la version 3.2.0 pour corriger une erreur tout en supprimant les marqueurs avec des Info-bulles permanentes de la carte.

p>


1 commentaires

Fix rapide et il a fait le travail pour un projet NextJS. Merci!



0
votes

Ajouter "@ Types / Leaflet": "1.7.0" dans les dépendances de package.json.


0 commentaires

1
votes

Dans son code source, React-Leaflet utilise l'opérateur de coalescination nuls qui n'est pas pris en charge par une version spécifique d'Acorn.

Pour plus de détails, consultez l'explication de Nnatter ici:

https://github.com/paullecam/react-leaflet/issues/883

Pour résoudre le problème, vous pouvez:

1- Utilisez la solution suggérée de NNATA:

https://babeljs.io/docs/en / Babel-Plugin-Proposal-Nullish-Coalescing-Operator

ou

2 - Au lieu d'utiliser le package React-Leaflet officiel que vous pouvez utiliser

Installation de NPM - Save @ Monsonjemy / React-Leaflet

de

https://www.npmjs.com/package/@monsonjemy/react -leaflet

qui est une fourche de RL 3.2.1.

De cette façon, vous n'avez pas à rétrograder ni ne pas faire de trucs drôles.


0 commentaires

2
votes

Après avoir installé React-Leaflet, le package existant. JSON sera comme ceci:

"browserslist": [
    ">0.2%",
    "not dead",
    "not op_mini all"
  ],

Mais en exécutant cela, il montrera une erreur comme ceci:

xxx

  1. Pour corriger le bogue, modifiez le fichier package.json ci-dessus vers (en tant que Array):
  2.  ./node_modules/@react-leaflet/core/esm/path.js 10:41
    Module parse failed: Unexpected token (10:41)
    File was processed with these loaders:
     * ./node_modules/babel-loader/lib/index.js
    You may need an additional loader to handle the result of these loaders.
    |   useEffect(function updatePathOptions() {
    |     if (props.pathOptions !== optionsRef.current) {
    >       const options = props.pathOptions ?? {};
    |       element.instance.setStyle(options);
    |       optionsRef.current = options;
    
    1. Après cela, allez dans les modules de nœud, supprimez le dossier .cache
    2. Arrêtez le serveur en utilisant ctrl c
    3. faire installer NPM encore


0 commentaires

0
votes

pour ceux qui utilisent NextJS

Créez une carte dans un composant et importez avec ssr: false;

Exemple: p >

Composant: map.js

import dynamic from 'next/dynamic'; // for dynamic importing
const OpenMap = dynamic(() => import('@/features/client/location/components/OpenMap'), {
  ssr: false,
});

Importez la carte dans une page ou où vous en avez besoin comme ceci:

Where.js p>

const OpenMap = () => {
  return (
    <div className="container">
      <MapContainer MapContainer style={{ height: '300px' }} center={[60.198334, 24.934541]} zoom={10}>
        <TileLayer
          attribution='&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
          url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
        />
      </MapContainer>
    </div>
  );
};

Alors vous pouvez l'utiliser ...

De plus, vous pouvez ajouter un composant de chargement si nécessaire.

pour plus de détails de Importation dynamique Vérifiez le lien en cliquant sur ici


0 commentaires

0
votes

Vous devez mettre à jour les réactifs pour résoudre ce problème dans package.json:

"react-scripts": "^5.0.0",


0 commentaires

0
votes

Installez ces moduaux dans pack Supprimer @ react-lisflet Forler dans les modules de nœuds Dans votre système avec CMD dans n'importe quel dossier

git clone https: / /github.com/hqdung99/maps-leaflet-youtube.git

Lorsque finirez, faites le dossier, ce nœud-modules et copiez ce dossier @ react-leaflet et passé dans les modules de nœuds précédents dossier


0 commentaires