Я просто пытаюсь запустить metro bundler для обслуживания приложения. Вот ошибка:
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, что, как мне кажется, имеет место. Моя трассировка стека ссылается на <code>...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 в пакетах реагировать *, чтобы найти дополнительные строки, где process.env использовался как левое назначение. Только нашел несколько, но не смог решить проблему.