Реагировать на проблему native metro bundler с недопустимым выражением assingmentexpression в левой части

Я просто пытаюсь запустить сборщик метро для обслуживания приложения. Вот ошибка:

TypeError: Property left of AssignmentExpression expected node to be of a type ["LVal"] but instead got "StringLiteral"
at Object.validate (/Users/tyler/Code/.../node_modules/@babel/types/lib/definitions/utils.js:128:13)
at Object.validate (/Users/tyler/Code/.../node_modules/@babel/types/lib/validators/validate.js:17:9)
at NodePath._replaceWith (/Users/tyler/Code/.../node_modules/@babel/traverse/lib/path/replacement.js:194:9)
at NodePath.replaceWith (/Users/tyler/Code/.../node_modules/@babel/traverse/lib/path/replacement.js:178:8)
at PluginPass.MemberExpression (/Users/tyler/Code/.../node_modules/babel-plugin-transform-inline-environment-variables/lib/index.js:19:18)
at newFn (/Users/tyler/Code/.../node_modules/@babel/traverse/lib/visitors.js:193:21)
at NodePath._call (/Users/tyler/Code/.../node_modules/@babel/traverse/lib/path/context.js:53:20)
at NodePath.call (/Users/tyler/Code/.../node_modules/@babel/traverse/lib/path/context.js:40:17)
at NodePath.visit (/Users/tyler/Code/.../node_modules/@babel/traverse/lib/path/context.js:88:12)
at TraversalContext.visitQueue (/Users/tyler/Code/.../node_modules/@babel/traverse/lib/context.js:118:16)

это означает, что что-то вроде Platform.OS = "ios" преобразуется в "ios" = "ios": вот так <- Этот PR также обращается к TypeError, генерируемой для process.env, что, по-видимому, имеет место для меня. Моя трассировка стека ссылается на ...babel-plugin-transform-inline-environment-variables/lib/index.js:19:18, который занимается исключительно установкой process.env. В моем коде есть только два места, где используется переменная из process.env, и ни одно из них не используется в левой части присваивания.

Однако PR 45 для сборщика пакетов для метро был объединен еще в 2017 году. И я использую последнюю версию, кстати, это происходит при попытке запустить сборщик со скриптом "NODE_ENV=development npm start -- --reset-cache". Обратите внимание, что я использую флаг сброса кеша, как упоминалось в здесь

Коллега предположил, что ошибка может быть вызвана плагином, поддерживающим реакцию, но я еще не обнаружил его, если это так. Мы только что перенесли это приложение на Babel 7, кстати. Сейчас я наткнулся на стену идей, а следы Google устаревают. Что еще могло быть причиной этой ошибки?

Вот зависимости от моего package.json на случай, если это поможет:

}
 ...
 "dependencies": {
   "@babel/runtime": "^7.0.0",
   "lodash.capitalize": "^4.2.1",
   "lodash.debounce": "^4.0.8",
   "lodash.find": "^4.6.0",
   "phoenix": "^1.3.4",
   "prettier": "^1.14.2",
   "prop-types": "^15.6.2",
   "react": "^16.4.2",
   "react-native": "0.57.0",
   "react-native-firebase": "^4.3.8",
   "react-native-keep-awake": "^3.1.0",
   "react-native-linear-gradient": "^2.4.2",
   "react-native-router-flux": "^4.0.1",
   "react-native-swiper": "^1.5.13",
   "react-native-tts": "^2.0.0",
   "react-redux": "^5.0.7",
   "redux": "^4.0.0",
   "redux-thunk": "^2.3.0",
   "spokestack-react-native": "0.0.2"
 },
 "devDependencies": {
   "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
   "@babel/plugin-transform-runtime": "^7.0.0",
   "babel-core": "^7.0.0-bridge.0",
   "babel-plugin-transform-inline-environment-variables": "^0.4.3",
   "imagemin": "^6.0.0",
   "imagemin-jpegtran": "^5.0.2",
   "imagemin-optipng": "^5.2.1",
   "imagemin-svgo": "^7.0.0",
   "jest": "^23.6.0",
   "metro-react-native-babel-preset": "^0.45.2",
   "pre-commit": "^1.2.2",
   "precise-commits": "^1.0.2",
   "react-test-renderer": "^16.4.2",
   "redux-mock-store": "^1.5.3"
  },
  ...
}

... и, кроме того, babel.config.js согласно babel 7

module.exports = {
  presets: ['module:metro-react-native-babel-preset'],
  plugins: [
    '@babel/plugin-transform-runtime',
    '@babel/plugin-proposal-object-rest-spread',
    'transform-inline-environment-variables'
  ]
}

ОБНОВЛЕНИЕ: я использовал grep в пакетах react- *, чтобы найти дополнительные строки, в которых process.env использовался как левое присваивание. Нашел только несколько, но не смог решить проблему.

Попробуйте использовать process.env["NODE_ENV"], как упоминалось здесь

Pritish Vaidya 13.09.2018 21:41

@PritishVaidya не решает проблему. В любом случае, это не должно было быть проблемой, поскольку PR, на который я ссылался в своем вопросе, устранил проблему между обозначением точки и скобки на process.env. В любом случае спасибо за предложение.

rtmalone 13.09.2018 22:13
1
2
725
1

Ответы 1

Ошибка, которую вы видите в журнале, связана с babel-plugin-transform-inline-environment-variables. Если вы исключите его из файла конфигурации, сборка должна пройти.

Я столкнулся с той же проблемой и пока не нашел хорошего решения, поэтому попробуйте обойти способ передачи переменных среды.

Другие вопросы по теме