Нет поддержки пространства имен после обновления Babel в React Native? - PullRequest
0 голосов
/ 18 апреля 2019

Я создал проект, используя'act-native init --typescript ', обновил реактив-native до 0.59.5, babel с помощью npx babel-upgrade, установил и настроил предустановку metro-реагировать-native-babel-preset.Однако теперь в журнале говорится, что пространства имен не поддерживаются.Есть ли что-то еще, что я должен сделать?

Я попытался очистить кэш npm, удалить каталог node_modules и повторить установку npm.Я даже пытался перестроить проект.

.babelrc

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

package.json

{
  "name": "Ovik",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "react-native start --skipflow --reset-cache",
    "develop:android": "react-native run-android --no-packager",
    "develop:ios": "react-native run-ios --no-packager",
    "check": "tsc --noEmit || true"
  },
  "dependencies": {
    "@babel/core": "^7.0.0",
    "babel-loader": "^8.0.5",
    "es6-symbol": "^3.1.1",
    "firebase": "^5.9.4",
    "futura": "^0.2.0",
    "geofire": "^5.0.1",
    "lodash.isequal": "^4.5.0",
    "react": "^16.8.6",
    "react-native": "^0.59.5",
    "react-native-firebase": "^5.3.1",
    "react-native-safe-area-view": "^0.13.1",
    "react-native-slider": "^0.11.0",
    "react-native-typography": "^1.4.0"
  },
  "devDependencies": {
    "@types/lodash.isequal": "^4.5.5",
    "@types/react": "^16.8.13",
    "@types/react-native": "^0.57.45",
    "babel-core": "^7.0.0-bridge.0",
    "babel-jest": "^23.4.2",
    "jest": "^24.7.1",
    "metro-react-native-babel-preset": "^0.53.1",
    "patch-package": "^6.1.2",
    "react-native-typescript-transformer": "^1.2.12",
    "react-test-renderer": "^16.8.6",
    "tslint": "^5.16.0",
    "tslint-language-service": "^0.9.9",
    "typescript": "^3.4.3",
    "@babel/preset-flow": "^7.0.0"
  },
  "jest": {
    "preset": "react-native",
    "transform": {
      "^.+\\.js$": "<rootDir>/node_modules/react-native/jest/preprocessor.js"
    }
  }
}

Я ожидал, что проект будет упакован, как и раньше, однаковыдает следующую ошибку

error: bundling failed: SyntaxError: D:\Project\ovik\src\state\loading\index.ts: Namespaces are not supported.
  48 | /** Types */
  49 |
> 50 | export namespace Loading {
     |        ^
  51 |   export interface State {
  52 |   }
  53 |
    at File.buildCodeFrameError (D:\Project\ovik\node_modules\@babel\core\lib\transformation\file\file.js:261:12)
    at NodePath.buildCodeFrameError (D:\Project\ovik\node_modules\@babel\traverse\lib\path\index.js:157:21)
    at PluginPass.TSModuleDeclaration (D:\Project\ovik\node_modules\@babel\plugin-transform-typescript\lib\index.js:244:22)
    at newFn (D:\Project\ovik\node_modules\@babel\traverse\lib\visitors.js:193:21)
    at NodePath._call (D:\Project\ovik\node_modules\@babel\traverse\lib\path\context.js:53:20)
    at NodePath.call (D:\Project\ovik\node_modules\@babel\traverse\lib\path\context.js:40:17)
    at NodePath.visit (D:\Project\ovik\node_modules\@babel\traverse\lib\path\context.js:88:12)
    at TraversalContext.visitQueue (D:\Project\ovik\node_modules\@babel\traverse\lib\context.js:118:16)

1 Ответ

0 голосов
/ 18 апреля 2019

Мои знания по React Native ограничены, но я довольно давно знаю о транспиляторах / упаковщиках.

Ваше обновление явно включает в себя новый пресет машинописи babel или плагин transform-typescript. Как сказано, namespace не поддерживается в babel. Причина, по которой babel переносится на файл, в отличие от машинописного текста, который использует проект в целом.

Это предостережение останется, и вряд ли оно будет исправлено в ближайшем будущем. Таким образом, вы либо отбрасываете использование namespace, либо переключаетесь обратно на предыдущую конфигурацию и продолжаете использовать tsc в качестве компилятора.

...