Реагируйте на обновление с Babel 6 до Babel 7 - PullRequest
0 голосов
/ 06 октября 2018

Какими будут шаги по обновлению с babel 6 до babel 7 существующего реактивного проекта?

Это старые зависимости:

 "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), что мне нужно сделать, чтобы сделать это обновление, выполнить команды и что следует добавить в зависимости и что вdevDependencies.

Также мне не очень понятно, в чем разница между babel 6 и babel 7 в отношении того, что происходит с кодом JS в реактивно-нативном проекте.

Пожалуйста, не делайтеЧтобы ответить просто ссылками на babel doc или на журнал изменений в оригинальной версии 0.57.

Мне понадобятся хотя бы несколько основных шагов для этого обновления и пример package.json проекта RN, основанного на babel.7.

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Использование babel-upgrade.

Вы можете попробовать использовать babel-upgrade для автоматического обновления зависимостей Babel.

Это очень просто в использовании, даже без его глобальной установки.

Я рекомендую иметь чистый рабочий каталог (без изменений) и просто запустить следующую команду:

npx babel-upgrade --write

Это обновит ваши package.json и ваши .babelrc файлы с правильными версиями Babelи пакеты.

Команда --write просто указывает инструменту сохранить изменения на диск.Вот почему я предложил иметь чистый рабочий каталог, чтобы вы могли просмотреть изменения с помощью git diff.Если вы опустите --write, он просто покажет необходимые изменения в консоли.

Дополнительную информацию вы можете увидеть на https://github.com/babel/babel-upgrade.

0 голосов
/ 09 октября 2018

Краткий ответ:

run npx babel-upgrade

(тогда вы можете посмотреть package.json, чтобы проверить, что изменилось)

Длинный ответ :

Для RN ​​0.57.x после прочтения документации по babel и babel-upgrade я понял, что достаточно иметь все старые зависимости babel внутри devDependencies для моего проекта:

"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 версии> = 5.2.0) Если у вас есть более старые версии npm, у вас естьдля установки npx глобально.

npx позволяет запустить babel-upgrade без локальной установки.

2) Я запустил npx babel-upgrade (без --write option), чтобы увидеть, как обновление повлияет на мой пакет.json)

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"]
}

, как написано в инструкциях журнала изменений RN.

Сейчасpackage.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.

Если вы найдете лучшее решение или улучшения для этогоОбновление Babel, пожалуйста, добавьте комментарий или добавьте новый ответ, я буду рад обновить мой ответ или принять новый лучший.

Источники:

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

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

Для РН 0,58,6 Я заметил, что мне не нужно так много вавилонских капсул.Я заметил, что это создает новый проект с помощью команды act-native init .

Мой package.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 deps в файле pod.Я добавил / повторно добавил их в Связанные фреймворки и библиотеки раздел

...