• 针对Umi、React中遇到的 “xxxx”不能用作 JSX 组件 问题解决方案


    一、处理方案

    1. 这是因为"@types/react"、"@types/react-dom"在子依赖中使用的版本不一致导致,一般情况npm会自动帮我们处理版本不一致的问题。如果npm处理不了,就需要我们自己手动处理
    2. 在package.json中添加一项配置
      1. {
      2. name:"test"
      3. version:"1.0.0",
      4. ...,
      5. "devDependencies": {
      6. "@types/react": "17.0.0",
      7. "@types/react-dom": "17.0.0"
      8. },
      9. "resolutions": {
      10. "@types/react": "17.0.0",
      11. "@types/react-dom": "17.0.0"
      12. },
      13. }
    3. 在package.json中的scripts中添加一行命令
      1. {
      2. "scripts":{
      3. "preinstall": "npx force-resolutions"
      4. }
      5. }
    4. 配置完成之后要执行一次preinstall命令:npm run preinstall 。如果执行命令后还是会有报错,执行 npm i 安装全部依赖,再次执行 npm run preinstall

    二、原因

    以下内容引用自:package.json中的resolutions作用_package.json resolutions-CSDN博客

    resolutions 是一个用于解决依赖项冲突的 npm 特殊字段。在某些情况下,您的项目依赖项可能需要不同的版本,而这些版本之间可能存在冲突。这时候,您可以使用 resolutions 字段来指定应该使用哪个版本,以解决这些冲突。

    例如,如果您的项目依赖于 package-a 和 package-b,而这两个包都依赖于 package-c,但它们依赖于 package-c 的不同版本,这会导致冲突。在这种情况下,您可以在 package.json 文件中使用 resolutions 字段来指定应该使用哪个版本。例如:

    1. {
    2. "dependencies": {
    3. "package-a": "^1.0.0",
    4. "package-b": "^2.0.0"
    5. },
    6. "resolutions": {
    7. "package-c": "^1.2.0"
    8. }
    9. }

    在这个示例中,我们指定了 package-c 的版本应该是 ^1.2.0。这意味着当 npm 安装依赖项时,它将使用 1.2.x 系列中的最新版本来解决 package-a 和 package-b 之间的冲突。

    需要注意的是,resolutions 字段只在您的项目依赖项中出现冲突时才需要使用。在大多数情况下,npm 可以自动解决依赖项之间的冲突,而无需使用 resolutions 字段。

    当某些安全扫描工具(例如fossa)扫描出项目依赖的子依赖版本需要升级的情况,也可以尝试使用此方法来解决。

    在package.json文件里添加跟scripts、dependencies、evDependencies平级的resolutions,把想要强制升级的子依赖期望版本写入,scripts里添加配置"preinstall": "npx force-resolutions",最后像启动项目一样使用npm run preinstall运行下载,最后达成目的。

    1. {
    2. "name": "xxx",
    3. "version": "1.0.0",
    4. "description": "xxx",
    5. "author": "xxx",
    6. "private": true,
    7. "scripts": {
    8. "dev": "webpack-dev-server --inline --hot --progress --config build/webpack.dev.conf.js",
    9. "start": "npm run dev",
    10. "unit": "jest --config test/unit/jest.conf.js --coverage",
    11. "e2e": "node test/e2e/runner.js",
    12. "test": "npm run unit && npm run e2e",
    13. "build": "node build/build.js",
    14. "preinstall": "npx force-resolutions"
    15. },
    16. "dependencies": {
    17. "@types/echarts": "0.0.13",
    18. "ajv": "^6.12.6",
    19. "awe-dnd": "^0.3.4",
    20. "axios": "^0.26.0",
    21. "babel-polyfill": "^6.26.0"
    22. },
    23. "devDependencies": {
    24. "vue-template-compiler": "^2.6.11",
    25. "webpack": "^3.12.0",
    26. "webpack-bundle-analyzer": "^2.13.1",
    27. "webpack-merge": "^4.2.2"
    28. },
    29. "resolutions": {
    30. "lodash.template": "4.5.0",
    31. "eventsource": "1.1.1",
    32. "ms":"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
    33. },
    34. "engines": {
    35. "node": ">= 12.0.0",
    36. "npm": ">= 3.0.0"
    37. },
    38. "browserslist": [
    39. "> 1%",
    40. "last 2 versions",
    41. "not ie <= 8"
    42. ]
    43. }

  • 相关阅读:
    设计模式【5】——观察者模式
    应用平台桌面菜单由常规拖放,换成ht.Grid布局操作步骤
    httprunner4学习总结1 - 相关概念
    万字长文!对比分析了多款存储方案,KeeWiDB最终选择自己来
    SuperMap 是个什么鬼
    ROS标定海康威视摄像头
    Linux中的apt与yum
    基础的SpringMvc开发
    Linux系统安装Tomcat一条龙服务
    (学习日记)2022.7.27
  • 原文地址:https://blog.csdn.net/weixin_54607676/article/details/136259012