如何修复错误“无法编译:./node_modules/@react-leaflet/core/esm/path.js 10:41 module解析失败:意外令牌(10:41)”

IT技术 javascript reactjs typescript leaflet react-leaflet
2021-01-20 18:18:28

我正在尝试传单一起创建一个react-typescript应用程序我使用了命令,

npm install leaflet react-leaflet @types/react @types/leaflet --save 安装依赖项。

但是当我启动应用程序时,它说,

    ./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;

这是我的 package.json

{
  "name": "aq-monitor",
  "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",
    "@types/jest": "^26.0.23",
    "@types/leaflet": "^1.7.0",
    "@types/node": "^12.20.13",
    "@types/react": "^17.0.5",
    "@types/react-dom": "^17.0.5",
    "antd": "^4.15.5",
    "leaflet": "^1.7.1",
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    "react-leaflet": "^3.2.0",
    "react-router-dom": "^5.2.0",
    "react-scripts": "4.0.3",
    "typescript": "^4.2.4",
    "web-vitals": "^1.1.2"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "devDependencies": {
    "@types/react-router-dom": "^5.1.7"
  }
}

这是地图/index.tsx

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>
    );
}; 

我多次尝试重新安装依赖项,但仍然无效。

我知道这是一个简单的问题和我正在犯的错误,但是,我无法解决此错误。

任何输入表示赞赏。提前致谢。

6个回答

我找到了修复它的方法。

修复步骤:-

打开您的 package.json 文件并按如下方式编辑您的浏览器列表。

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

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

完成此操作后,删除node_modeules/.cache目录。

然后试试 npm install

npm start

多啊!

参考:-

您是否尝试删除 node_modules/.cache 目录?@hoogw
2021-03-16 18:18:28
我的 package.json 已经看起来像你指出的样子。我的错误,与 OP 一样仍然存在......我试图删除缓存文件夹并完全删除 node_modules。它仍然无法正常工作。
2021-03-23 18:18:28
为我工作,谢谢!rm -rf node_modules/.cache/ 是必要的
2021-03-26 18:18:28
这个答案真的救了我!
2021-03-29 18:18:28
我试过这个,但后来npm start,我得到提示:“我们无法检测到目标浏览器。你想将默认值添加到你的 package.json 中吗?›(是/否)”。如果我点击“否”,CRA 会退出并显示消息“从 react-scripts >=2 起,您必须指定目标浏览器。请将 browserslist 键添加到您的 package.json 中。” 如果我点击是,它会将我的 package.json 覆盖回原来的状态,继续,然后再次失败并显示相同的消息。这是使用 react-scripts 4.0.1。有没有人遇到过?对我有什么建议吗?
2021-04-14 18:18:28

该问题最终似乎与 create-react-app 及其捆绑文件的方式有关,如果您从以下位置替换浏览器目标,似乎可以解决:

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

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

然后停止服务器并重新运行它。

积分转到bkiac 官方 create-react-app github 问题

编辑

如果您下载此代码和框,您可以重现错误和修复当你打开它,它的工作原理,但如果你下载并在本地运行它,你可以使用第一个看到的错误browserslist的选项package.json如果您停止服务器,用browserslist新的替换选项并重新运行应用程序,您可以看到它按预期工作。

如下所示,您还应该删除缓存:node_modules/.cache。这对我有用。
2021-03-19 18:18:28
在我的情况下,如果您删除开发对象,请使用以下回复回答:“从 react-scripts >=2 起,您必须指定目标浏览器。”。然后它退出。你有哪个版本的反应脚本?
2021-03-20 18:18:28
"react-leaflet": "^3.2.0""react-scripts": "4.0.3"
2021-04-09 18:18:28

我在做 npm update 后遇到了这个问题。

安装了这些软件包: "react-leaflet": "^3.2.0"

并作为依赖项(在 .lock 中找到): "@react-leaflet/core": "1.1.0",

强制 npm 使用这些版本,为我修复了它:

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

"react-leaflet": "3.1.0",

所以试试 npm i react-leaflet@3.1.0 @react-leaflet/core@1.0.2

谢谢@SchitzelKraft!这是经过许多其他尝试后对我有用的解决方案。我认为有前途的一个是stackoverflow.com/a/67991412/558732但它没有解决我的问题。
2021-03-20 18:18:28

我通过更改browserslist其他人所说的来解决这个问题browserslist现在看起来像这样:

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

然后我做了以下事情:

  1. 删除你的node_modules文件夹
  2. npm cache clean --force
  3. npm install

现在一切都应该按预期工作。如果地图未加载,请不要忘记将传单 css 和 js 添加到您的页面并设置地图容器的高度。有关更多信息,请参阅官方文档

破解browserslist或降级包不是处理不针对合理版本 JS 的module的安全或长期解决方案@ jlahd的答案是伟大的,除了react-app-rewire-babel-loader不再支持其作者。您可以customize-cra通过使用以下命令更轻松地获得相同的结果(无论如何您应该将其与 CRA 一起使用,因为这是配置内容安全策略的唯一方法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
  ),
};
您的 npm 脚本是否使用react-app-rewired而不是react-scripts? 我在我的一个内部项目中完全使用了上面的文件(所以不需要 CSP 的东西)。
2021-03-22 18:18:28
我很欣赏你解决这个问题的推理和方法——快速修复设置而不是解决潜在问题并不是前进的方向。我即将尝试这个解决方案,我会告诉你它是否适合我。
2021-03-29 18:18:28
我没有手动更改它们。安装customize-cra 和react-app-rewired 会改变它们吗?我最终选择了@SchitzelKraft 的解决方案(上图,stackoverflow.com /a/67689949/558732 ),在删除节点module和清理缓存后,版本更改有效。我想测试您的解决方案并确保替换了反应脚本。
2021-03-31 18:18:28
我仍然遇到同样的问题:“编译失败”,并指出我 ./node_modules/@react-leaflet/core/esm/path.js 10:41 Module parse failed: Unexpected token (10:41)
2021-04-10 18:18:28
与 OP 的一个区别是我的文件正在由不同的加载程序处理(这超出了我的理解): File was processed with these loaders: * ./node_modules/react-scripts/node_modules/babel-loader/lib/index.js You may need an additional loader to handle the result of these loaders.
2021-04-12 18:18:28