代码之家  ›  专栏  ›  技术社区  ›  Florin Dobre

从Babel6到Babel7的本地升级

  •  8
  • Florin Dobre  · 技术社区  · 6 年前

    如何将现有的react原生项目从babel6升级到babel7?

    这些是旧的依赖关系:

     "dependencies": {
        .........
        "babel-plugin-transform-runtime": "^6.23.0",
        "babel-preset-latest": "^6.24.1",
        "babel-preset-stage-0": "^6.24.1",
        "babel-register": "^6.24.1",
        "prop-types": "^15.5.10",
        "react": "16.3.1",
        "react-native": "0.55.4",
        "react-redux": "5.0.7",
        "redux": "^4.0.0",
        "redux-actions": "^2.6.1",
        "redux-mock-store": "^1.5.1",
        "redux-persist": "^5.10.0",
        "redux-thunk": "^2.1.0",
      },
      "devDependencies": {
        "babel-eslint": "^8.2.2",
        "babel-plugin-syntax-object-rest-spread": "^6.13.0",
        "babel-plugin-transform-object-rest-spread": "^6.23.0",
        "babel-preset-react-native": "^4.0.0",
        "babel-preset-react-native-stage-0": "^1.0.1",
        "eslint": "^4.18.1",
        "eslint-config-airbnb": "^17.0.0",
        "eslint-plugin-flowtype": "^2.46.1",
        "eslint-plugin-import": "^2.14.0",
        "eslint-plugin-jsx-a11y": "6.1.1",
        "eslint-plugin-react": "^7.4.0",
        "gulp": "^3.9.0",
        "gulp-eslint": "4.0.2",
        "gulp-mocha": "6.0.0",
        "jest": "^23.5.0",
        .....
      },
    

    要进行此更新,您必须遵循哪些步骤? 新的依赖项应该是什么样子?

    我不太清楚(在阅读了babel文档之后)我应该做什么来进行升级,要运行的命令,应该在依赖项中添加什么,在devdependency中添加什么。

    另外,我也不太清楚babel6和babel7在react原生项目中的JS代码有什么不同。

    请不要只回应与巴贝尔文件或反应本地0.57更改日志链接。

    2 回复  |  直到 6 年前
        1
  •  7
  •   Florin Dobre    5 年前

    简短回答:

    run npx babel-upgrade

    package.json 检查发生了什么变化)

    冗长的回答 :

    对于RN 0.57.x,在阅读了babel和babel升级文档之后,我意识到在我的项目的devDependencies中包含所有旧的babel依赖项就足够了:

    "dependencies": {
        .........
        "react": "16.3.1",
        "react-native": "0.55.4",
     },
    
    "devDependencies": {
       "babel-plugin-transform-runtime": "^6.23.0",
        "babel-preset-latest": "^6.24.1",
        "babel-preset-stage-0": "^6.24.1",
        "babel-register": "^6.24.1",
        "react-native": "0.55.4",
        "babel-eslint": "^8.2.2",
        "babel-plugin-syntax-object-rest-spread": "^6.13.0",
        "babel-plugin-transform-object-rest-spread": "^6.23.0",
        "babel-preset-react-native": "^4.0.0",
        "babel-preset-react-native-stage-0": "^1.0.1",        
        .....
      },
    

    1) 我曾经 npx babel-upgrade ( npx公司 已包含在 npm 如果你有更老的 npm公司 必须安装的版本

    npx公司 让你跑步 不在本地安装。

    2) 我跑了 npx babel-upgrade (没有 --write option )查看升级将如何影响my package.json deps)

    3) npx babel-upgrade --write

    4) 我将RN版本设置为0.57.1,并将babel预设依赖项从 "babel-preset-react-native": "^5" ,至 "metro-react-native-babel-preset": "^0.45.0" ,和 .babelrc 配置为:

    {
        "presets": ["module:metro-react-native-babel-preset"]
    }
    

    现在 包.json 看起来像这样:

      "dependencies": {
        "react": "16.5.0",
        "react-native": "0.57.1",
        .......
      }
    
      "devDependencies": {
        "@babel/core": "^7.0.0",
        "@babel/plugin-proposal-class-properties": "^7.0.0",
        "@babel/plugin-proposal-decorators": "^7.0.0",
        "@babel/plugin-proposal-do-expressions": "^7.0.0",
        "@babel/plugin-proposal-export-default-from": "^7.0.0",
        "@babel/plugin-proposal-export-namespace-from": "^7.0.0",
        "@babel/plugin-proposal-function-bind": "^7.0.0",
        "@babel/plugin-proposal-function-sent": "^7.0.0",
        "@babel/plugin-proposal-json-strings": "^7.0.0",
        "@babel/plugin-proposal-logical-assignment-operators": "^7.0.0",
        "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0",
        "@babel/plugin-proposal-numeric-separator": "^7.0.0",
        "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
        "@babel/plugin-proposal-optional-chaining": "^7.0.0",
        "@babel/plugin-proposal-pipeline-operator": "^7.0.0",
        "@babel/plugin-proposal-throw-expressions": "^7.0.0",
        "@babel/plugin-syntax-dynamic-import": "^7.0.0",
        "@babel/plugin-syntax-import-meta": "^7.0.0",
        "@babel/plugin-syntax-object-rest-spread": "^7.0.0",
        "@babel/plugin-transform-runtime": "^7.0.0",
        "@babel/preset-env": "^7.0.0",
        "@babel/preset-flow": "^7.0.0",
        "@babel/register": "^7.0.0",
        "babel-core": "^7.0.0-bridge.0",
        "babel-preset-react-native-stage-0": "^1.0.1",
        .....
    
    }
    

    我不确定 gradle-upgrade 但是这个项目在android和ios上都可以正常构建和运行。

    资料来源:

    https://github.com/react-native-community/react-native-releases/blob/master/CHANGELOG.md#057

    https://github.com/babel/babel-upgrade

    为了 注册护士0.58.6 我注意到我不需要那么多巴别塔德普。我注意到这一点,创建一个新的项目 反应本机初始化

    我的 包.json 文件现在如下所示:

    {
      "dependencies": {
        "react": "16.6.3",
        "react-native": "0.58.6",
        // ....
    
      },
      "devDependencies": {
        "@babel/core": "^7.0.0-0",
        "babel-core": "^7.0.0-bridge.0",
        "babel-eslint": "^10.0.1",
        "babel-jest": "24.1.0",
        "jest": "24.1.0",
        "metro-react-native-babel-preset": "0.53.0",
        "react-test-renderer": "16.6.3",
        // .... 
    
      },
      "jest": {
        "preset": "react-native", 
       // ...
      }
    
    }
    

    对于IOS:我能够在IOS中构建它,而不需要任何 react/react-native 链接框架和库

        2
  •  4
  •   Joshua Pinter    5 年前

    使用 babel-upgrade .

    你可以试着用 babel升级 为了自动升级你的巴别塔依赖。

    它非常容易使用,即使不在全球范围内安装。

    我建议使用一个干净的工作目录(没有未分级的更改),只需运行以下命令:

    npx babel-upgrade --write
    

    这将更新您的 package.json .babelrc 具有正确巴贝尔版本和包的文件。

    这个 --write 命令只是告诉工具将更改保存到磁盘。这就是为什么我建议使用一个干净的工作目录,这样您就可以使用 git diff . 如果你忽略了 --写 它只会在控制台中显示所需的更改。

    有关更多信息,请访问 https://github.com/babel/babel-upgrade .

        3
  •  0
  •   anddmn    3 年前

    对于2021年有这个问题的人: npm安装--保存dev@babel/core@babel/cli