错误:无法解析“C:\work\demo\node_modules\mime-types”中的“路径”

7 javascript npm reactjs

将"react-scripts": "4.0.3"更新为"react-scripts": "5.0.1" 后出现错误,请告诉我为什么会收到此错误或如何解决此问题...

./node_modules/mime-types/index.js 中的错误 15:14-37

找不到模块:错误:无法解析“C:\work\sams-frontend-su\node_modules\mime-types”中的“路径”

重大更改:webpack < 5 默认情况下包含 Node.js 核心模块的 Polyfill。这已不再是这种情况。验证您是否需要此模块并为其配置一个polyfill。

如果你想包含一个polyfill,你需要: - 添加一个后备 'resolve.fallback: { "path": require.resolve("path-browserify") }' - 安装 'path-browserify' 如果你不这样做想要包含一个polyfill,你可以使用一个空模块,如下所示:resolve.fallback: { "path": false }

另外,我在父路径中创建了一个 webpack.config.js 文件

module.exports = {
  resolve: {
    fallback: { "path": require.resolve("path-browserify") },
  },
};
Run Code Online (Sandbox Code Playgroud)

包.json

{
    "dependencies": {
    "@testing-library/jest-dom": "^5.16.4",
    "@testing-library/react": "^13.2.0",
    "@testing-library/user-event": "^13.5.0",
    "web-vitals": "^2.1.4"
  },
  "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": {
    "@babel/cli": "^7.17.10",
    "@babel/core": "^7.18.0",
    "@babel/preset-env": "^7.18.0",
    "@emotion/react": "^11.9.0",
    "@emotion/styled": "^11.8.1",
    "@mui/icons-material": "^5.8.0",
    "@mui/lab": "^5.0.0-alpha.82",
    "@mui/material": "^5.8.0",
    "@mui/styles": "^5.8.0",
    "antd": "^4.20.6",
    "axios": "^0.27.2",
    "formik": "^2.2.9",
    "mime-types": "^2.1.35",
    "moment": "^2.29.3",
    "react": "^18.1.0",
    "react-dom": "^18.1.0",
    "react-csv": "^2.2.2",
    "react-draggable": "^4.4.5",
    "react-scripts": "^5.0.1",
    "react-table": "^7.8.0",
    "react-window": "^1.8.7",
    "spelling": "^2.0.2",
    "yup": "^0.32.11"
  },
  "peerDependencies": {
    "react": "^16.8.0 || ^17.0.0",
    "react-dom": "^16.8.0 || ^17.0.0"
  }
}

Run Code Online (Sandbox Code Playgroud)

Ait*_*war 7

问题是,在 v4 和 v5 之间,react-scriptsWebpack 也从 v4 更新到了 v5。过去,当从浏览器代码导入时,它会自动填充 Node.js 模块,但这种情况在 v5 中发生了变化。现在,您必须明确告知 Webpack 它应该使用 polyfill。

你的webpack.config.js不起作用,因为react-scripts忽略这个文件并使用它附带的文件。有一个名为cracohttps://github.com/gsoft-inc/craco)的第 3 方包,它使您可以修补 Webpack 配置,但它没有标记为兼容 v5,所以我怀疑它是否会起作用。

然后您可以做两件事:
a) 降级到 v4 并停留在那里,直到 Craco 准备好使用 v5。
b) 使用浏览器原生库mime来代替

该库不使用任何 Node.js API,因此浏览器原生支持它。试一试。


MD.*_*SAN 1

路径依赖是 Node.js 运行时的一部分。替代方法是仅使用mime模块。这个模块是为了解决这个问题而设计的。它使用与该模块相同的数据源,并且具有所有相同的映射。

npm install mime
Run Code Online (Sandbox Code Playgroud)

参考:链接1链接2