【问题标题】:Error: Can't resolve 'path' in 'C:\work\demo\node_modules\mime-types'错误:无法解析“C:\work\demo\node_modules\mime-types”中的“路径”
【发布时间】:2022-06-13 14:00:09
【问题描述】:

"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

如果你想包含一个 polyfill,你需要: - 添加一个后备 'resolve.fallback: { "path": require.resolve("path-browserify") }' - 安装“路径浏览器” 如果您不想包含 polyfill,则可以使用这样的空模块: resolve.fallback: { "path": false }

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

module.exports = {
  resolve: {
    fallback: { "path": require.resolve("path-browserify") },
  },
};

包.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"
  }
}

【问题讨论】:

  • SO answerGithub issue 是否能解决您的问题?
  • 我检查了它,但他们提到在 node_modules 下添加该后备代码,但如果有人删除节点模块并再次安装,那么每次开发人员需要执行相同的过程时,这将不是一个永久的解决方案跨度>
  • 这不是一个实用的解决方案,所以如果我们可以在父文件中添加 webpack.config.js 文件并在其下添加后备代码,如果我们可以做这样的事情会更好的解决方案跨度>
  • 或者当我部署它时,服务器将 node_module 安装在存储桶中,然后在本地更新 node_module 下的 webpack.config.js,这将不起作用
  • 您是否使用 Create React App(CRA) 引导您的应用程序?您的“package.json”文件似乎不正确。

标签: javascript reactjs npm


【解决方案1】:

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

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

那么你可以做两件事:
a) 降级到 v4 并留在那里,直到 Craco 为 v5 做好准备。
b) 改用 mime 之类的浏览器原生库

这个库不使用任何 Node.js API,因此它在浏览器中得到原生支持。试一试。

【讨论】:

    【解决方案2】:

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

    npm install mime
    

    参考:Link1Link2

    【讨论】:

    • 我安装了 mime,但我需要在哪个文件中添加 webpack.config.jsconfig-overrides.js 以及如何添加??
    【解决方案3】:

    我认为您可以通过此命令将包从 devDependencies 移动到依赖项

    npm i <package_name> -P

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      • 2015-12-16
      • 1970-01-01
      • 2020-07-07
      • 2022-09-27
      • 1970-01-01
      • 2020-08-21
      相关资源
      最近更新 更多