【问题标题】:react-scripts update from 3.4 to 4.0 causes Jest version errorreact-scripts 从 3.4 更新到 4.0 导致 Jest 版本错误
【发布时间】:2021-03-23 16:23:37
【问题描述】:

我正在尝试将 react-scripts 版本从 3.4.3 更新到 4.0 以获得对 4.0 的 typescript 支持 但更新抛出以下错误:

Create React App 提供的react-scripts 包需要依赖:

"babel-jest": "^26.6.0"

不要尝试手动安装:您的包管理器会自动安装。 但是,在树的较高位置检测到不同版本的 babel-jest:

我尝试通过以下方式更新:

  npm install --save --save-exact react-scripts@4.0.0

我尝试删除 node_modules,运行 cache clean --force 但我仍然收到此错误 并再次运行 npm install

这是我原来的 package.json

  {
   "name": "react-redux",
   "version": "0.1.0",
   "private": true,
   "scripts": {
       "start:local": "env-cmd -f .env.local react-scripts start",
       "start:dev": "env-cmd -f .env.dev react-scripts start",
       "start:qa": "env-cmd -f .env.qa react-scripts start",
       "start:uat": "env-cmd -f .env.uat react-scripts start",
       "start:prod": "env-cmd -f .env.prod react-scripts start",
       "build:local": "env-cmd -f .env.local react-scripts build",
       "build:dev": "env-cmd -f .env.dev react-scripts build",
       "build:qa": "env-cmd -f .env.qa react-scripts build",
       "build:uat": "env-cmd -f .env.uat react-scripts build",
       "build:prod": "env-cmd -f .env.prod react-scripts build",
       "prestart:api": "node tools/create-mock-db.js",
       "start:api": "node tools/api-server.js",
       "test": "jest",
       "start": "run-p start:api start:dev",
       "build": "run-p build:dev"
   },
   "jest": {
       "setupFiles": [
           "./tools/testSetup.js"
       ],
       "moduleNameMapper": {
           "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|mp3|wav|m4a|aac|oga)$": "<rootDir>/tools/fileMock.js",
           "\\.(css|less)$": "<rootDir>/tools/style-mock.js"
       }
   },
   "dependencies": {
       "@draft-js-plugins/editor": "^4.0.0-beta2",
       "@draft-js-plugins/mention": "^4.0.0-beta2",
       "@fluentui/react": "^7.109.1",
       "@progress/kendo-data-query": "1.5.2",
       "@progress/kendo-date-math": "1.5.1",
       "@progress/kendo-drawing": "1.6.0",
       "@progress/kendo-react-animation": "3.9.0",
       "@progress/kendo-react-buttons": "3.9.0",
       "@progress/kendo-react-data-tools": "^3.9.0",
       "@progress/kendo-react-dateinputs": "3.9.0",
       "@progress/kendo-react-dialogs": "3.9.0",
       "@progress/kendo-react-dropdowns": "3.9.0",
       "@progress/kendo-react-editor": "3.11.0",
       "@progress/kendo-react-excel-export": "3.9.0",
       "@progress/kendo-react-grid": "3.9.0",
       "@progress/kendo-react-inputs": "3.9.0",
       "@progress/kendo-react-intl": "3.9.0",
       "@progress/kendo-react-layout": "3.9.0",
       "@progress/kendo-react-pdf": "3.9.0",
       "@progress/kendo-react-popup": "3.9.0",
       "@progress/kendo-react-upload": "^3.14.0",
       "@progress/kendo-theme-bootstrap": "^4.9.1",
       "@reduxjs/toolkit": "^1.2.1",
       "@testing-library/jest-dom": "^4.2.4",
       "@testing-library/react": "^9.3.2",
       "@testing-library/user-event": "^7.1.2",
       "@types/bootstrap": "^4.3.1",
       "@types/enzyme": "^3.10.4",
       "@types/jest": "^24.0.24",
       "@types/node": "^12.0.0",
       "@types/react": "^16.9.0",
       "@types/react-dom": "^16.9.0",
       "@types/react-redux": "^7.1.5",
       "@types/react-router-dom": "^5.1.3",
       "@types/react-toastify": "^4.1.0",
       "@types/redux": "^3.6.0",
       "@types/redux-immutable-state-invariant": "^2.1.1",
       "@types/redux-thunk": "^2.1.0",
       "@types/reselect": "^2.2.0",
       "@uifabric/example-data": "^7.0.14",
       "@uifabric/icons": "^7.3.33",
       "bootstrap": "^4.4.1",
       "draft-js": "^0.11.7",
       "draft-js-export-html": "^1.4.1",
       "immer": "2.1.3",
       "lodash": "^4.17.20",
       "node-sass": "^4.14.1",
       "powerbi-client-react": "^1.1.0",
       "prop-types": "15.7.2",
       "react": "^16.12.0",
       "react-app-polyfill": "^1.0.6",
       "react-bootstrap": "^1.0.0-beta.16",
       "react-dom": "^16.12.0",
       "react-mentions": "^4.0.1",
       "react-redux": "^7.1.3",
       "react-router-dom": "^5.1.2",
       "react-scripts": "^3.4.3",
       "react-toastify": "^5.4.1",
       "react-transition-group": "4.3.0",
       "redux": "^4.0.4",
       "redux-immutable-state-invariant": "^2.1.0",
       "redux-thunk": "^2.3.0",
       "reselect": "^4.0.0",
       "typescript": "^4.1.2"
   },
   "devDependencies": {
       "@types/draft-js": "^0.10.44",
       "@types/lodash": "^4.14.161",
       "@types/react-mentions": "^3.3.0",
       "env-cmd": "^10.1.0",
       "enzyme": "^3.9.0",
       "enzyme-adapter-react-16": "1.11.2",
       "fetch-mock": "^8.1.0",
       "jest": "^24.9.0",
       "json-server": "^0.16.1",
       "node-fetch": "^2.6.1",
       "npm-run-all": "4.1.5",
       "react-test-renderer": "16.8.4",
       "react-testing-library": "^6.1.2",
       "redux-immutable-state-invariant": "2.1.0",
       "redux-mock-store": "^1.5.3",
       "rimraf": "2.6.3",
       "selfsigned": "^1.10.7",
       "style-loader": "0.23.1"
   },
   "browserslist": {
       "production": [
           ">0.2%",
           "not dead",
           "not op_mini all"
       ],
       "development": [
           "last 1 chrome version",
           "last 1 firefox version",
           "last 1 safari version"
       ]
   }
}

运行更新后,这是我的版本-

{
    "name": "react-redux",
    "version": "0.1.0",
    "private": true,
    "scripts": {
        "start:local": "env-cmd -f .env.local react-scripts start",
        "start:dev": "env-cmd -f .env.dev react-scripts start",
        "start:qa": "env-cmd -f .env.qa react-scripts start",
        "start:uat": "env-cmd -f .env.uat react-scripts start",
        "start:prod": "env-cmd -f .env.prod react-scripts start",
        "build:local": "env-cmd -f .env.local react-scripts build",
        "build:dev": "env-cmd -f .env.dev react-scripts build",
        "build:qa": "env-cmd -f .env.qa react-scripts build",
        "build:uat": "env-cmd -f .env.uat react-scripts build",
        "build:prod": "env-cmd -f .env.prod react-scripts build",
        "prestart:api": "node tools/create-mock-db.js",
        "start:api": "node tools/api-server.js",
        "test": "jest",
        "start": "run-p start:api start:dev",
        "build": "run-p build:dev"
    },
    "jest": {
        "setupFiles": [
            "./tools/testSetup.js"
        ],
        "moduleNameMapper": {
            "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|mp3|wav|m4a|aac|oga)$": "<rootDir>/tools/fileMock.js",
            "\\.(css|less)$": "<rootDir>/tools/style-mock.js"
        }
    },
    "dependencies": {
        "@draft-js-plugins/editor": "^4.0.0-beta2",
        "@draft-js-plugins/mention": "^4.0.0-beta2",
        "@fluentui/react": "^7.109.1",
        "@progress/kendo-data-query": "1.5.2",
        "@progress/kendo-date-math": "1.5.1",
        "@progress/kendo-drawing": "1.6.0",
        "@progress/kendo-react-animation": "3.9.0",
        "@progress/kendo-react-buttons": "3.9.0",
        "@progress/kendo-react-data-tools": "^3.9.0",
        "@progress/kendo-react-dateinputs": "3.9.0",
        "@progress/kendo-react-dialogs": "3.9.0",
        "@progress/kendo-react-dropdowns": "3.9.0",
        "@progress/kendo-react-editor": "3.11.0",
        "@progress/kendo-react-excel-export": "3.9.0",
        "@progress/kendo-react-grid": "3.9.0",
        "@progress/kendo-react-inputs": "3.9.0",
        "@progress/kendo-react-intl": "3.9.0",
        "@progress/kendo-react-layout": "3.9.0",
        "@progress/kendo-react-pdf": "3.9.0",
        "@progress/kendo-react-popup": "3.9.0",
        "@progress/kendo-react-upload": "^3.14.0",
        "@progress/kendo-theme-bootstrap": "^4.9.1",
        "@reduxjs/toolkit": "^1.2.1",
        "@testing-library/jest-dom": "^4.2.4",
        "@testing-library/react": "^9.3.2",
        "@testing-library/user-event": "^7.1.2",
        "@types/bootstrap": "^4.3.1",
        "@types/enzyme": "^3.10.4",
        "@types/jest": "^24.0.24",
        "@types/node": "^12.0.0",
        "@types/react": "^16.9.0",
        "@types/react-dom": "^16.9.0",
        "@types/react-redux": "^7.1.5",
        "@types/react-router-dom": "^5.1.3",
        "@types/react-toastify": "^4.1.0",
        "@types/redux": "^3.6.0",
        "@types/redux-immutable-state-invariant": "^2.1.1",
        "@types/redux-thunk": "^2.1.0",
        "@types/reselect": "^2.2.0",
        "@uifabric/example-data": "^7.0.14",
        "@uifabric/icons": "^7.3.33",
        "bootstrap": "^4.4.1",
        "draft-js": "^0.11.7",
        "draft-js-export-html": "^1.4.1",
        "immer": "2.1.3",
        "lodash": "^4.17.20",
        "node-sass": "^4.14.1",
        "powerbi-client-react": "^1.1.0",
        "prop-types": "15.7.2",
        "react": "^16.12.0",
        "react-app-polyfill": "^1.0.6",
        "react-bootstrap": "^1.0.0-beta.16",
        "react-dom": "^16.12.0",
        "react-mentions": "^4.0.1",
        "react-redux": "^7.1.3",
        "react-router-dom": "^5.1.2",
        "react-scripts": "4.0.0",
        "react-toastify": "^5.4.1",
        "react-transition-group": "4.3.0",
        "redux": "^4.0.4",
        "redux-immutable-state-invariant": "^2.1.0",
        "redux-thunk": "^2.3.0",
        "reselect": "^4.0.0",
        "typescript": "^4.0.3"
    },
    "devDependencies": {
        "@types/draft-js": "^0.10.44",
        "@types/lodash": "^4.14.161",
        "@types/react-mentions": "^3.3.0",
        "env-cmd": "^10.1.0",
        "enzyme": "^3.9.0",
        "enzyme-adapter-react-16": "1.11.2",
        "fetch-mock": "^8.1.0",
        "jest": "^24.9.0",
        "json-server": "^0.16.1",
        "node-fetch": "^2.6.1",
        "npm-run-all": "4.1.5",
        "react-test-renderer": "16.8.4",
        "react-testing-library": "^6.1.2",
        "redux-immutable-state-invariant": "2.1.0",
        "redux-mock-store": "^1.5.3",
        "rimraf": "2.6.3",
        "selfsigned": "^1.10.7",
        "style-loader": "0.23.1"
    },
    "browserslist": {
        "production": [
            ">0.2%",
            "not dead",
            "not op_mini all"
        ],
        "development": [
            "last 1 chrome version",
            "last 1 firefox version",
            "last 1 safari version"
        ]
    }
}

我们应该手动更新 jest 吗?

【问题讨论】:

  • 我有同样的问题,但我还没有找到解决方案。
  • 通过终端从项目中删除 node_modules 对我有用。

标签: typescript jestjs babel-jest react-scripts


【解决方案1】:

babel-loader 也有类似的问题。可能是您项目中的另一个依赖项正在安装不同版本的babel-jest,这与react-srcipts@4.0.0 不兼容。

  1. 删除节点模块
  2. 删除 package-lock.json
  3. 在当前目录中打开终端并运行npm ls babel-jest - 这将告诉你项目中的其他依赖项需要 babel-jest。
  4. 暂时从package.json中移除需要babel-jest的依赖。
  5. 运行npm i
  6. 安装完成后,检查 babel-jest 版本 - 应该是 react-scripts 需要的版本。
  7. 现在恢复您删除的依赖项并再次运行npm i 或使用标志-s-D(dep./dev-dep)分别安装它们。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。解决方案是对 Create React App 4 所需的所有其他库进行升级(不仅仅是 react-scripts)

    这篇文章是一个很好的指南: https://betterprogramming.pub/upgrade-create-react-app-based-projects-to-version-4-cra-4-d7962aee11a6

    【讨论】:

      猜你喜欢
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 2019-11-06
      • 1970-01-01
      • 2023-01-30
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      相关资源
      最近更新 更多