-
Notifications
You must be signed in to change notification settings - Fork 24.8k
Closed
Labels
Impact: RegressionDescribes a behavior that used to work on a prior release, but stopped working recently.Describes a behavior that used to work on a prior release, but stopped working recently.JavaScriptPlatform: LinuxBuilding on Linux.Building on Linux.Resolution: LockedThis issue was locked by the bot.This issue was locked by the bot.Tech: Bundler 📦This issue is related to the bundler (Metro, Haul, etc) used.This issue is related to the bundler (Metro, Haul, etc) used.
Description
- Review the documentation: https://facebook.github.io/react-native
- Search for existing issues: https://github.com/facebook/react-native/issues
- Use the latest React Native release: https://github.com/facebook/react-native/releases
Environment
React Native Environment Info:
System:
OS: Linux 4.17 Arch Linux rolling
CPU: x64 Intel(R) Core(TM) i7-3770K CPU @ 3.50GHz
Memory: 1.06 GB / 7.47 GB
Shell: 5.5.1 - /bin/zsh
Binaries:
Node: 10.6.0 - /usr/bin/node
Yarn: 1.7.0 - /usr/bin/yarn
npm: 6.1.0 - /usr/bin/npm
Watchman: 4.9.0 - /usr/bin/watchman
SDKs:
Android SDK:
Build Tools: 23.0.1, 23.0.3, 25.0.2, 26.0.1, 26.0.2, 27.0.0, 27.0.3
API Levels: 22, 23, 24, 25, 26, 27
npmPackages:
react: ^16.4.1 => 16.4.1
react-native: ^0.56.0 => 0.56.0
npmGlobalPackages:
react-native-cli: 2.0.1
react-native-git-upgrade: 0.2.7
Description
Bundler cuts off some used babel helpers in release build. Look like by mistake while optimization.
For example initializerDefineProperty
and applyDecoratedDescriptor
needed by @babel/proposal-decorators
.
Reproducible Demo
{
"presets": ["react-native"],
"plugins": [
["@babel/proposal-decorators", {"legacy": true}]
]
}
"devDependencies": {
"@babel/plugin-proposal-decorators": "7.0.0-beta.47"
}
function test() {}
class Test {
@test val;
}
undefined is not a function (evaluating 'babelHelpers.applyDecoratedDescriptor(_class.prototype, "val", [test], {
enumerable: true,
initializer: null
})')
Workaround 1 (can have side effects)
Be care because this workaround can bring some errors with external libs.
For RN 0.56:
yarn add --dev @babel/plugin-transform-runtime@7.0.0-beta.47
.babelrc
{
"presets": ["react-native"],
"plugins": [
["@babel/plugin-proposal-decorators", {"legacy": true}],
["@babel/plugin-transform-runtime", {
"polyfill": false,
"regenerator": false
}]
]
}
For RN 0.57:
yarn add --dev @babel/plugin-transform-runtime@7.0.0
.babelrc
{
"presets": ["module:metro-react-native-babel-preset"],
"plugins": [
["@babel/plugin-proposal-decorators", {"legacy": true}],
["@babel/plugin-transform-runtime", {
"polyfill": false,
"regenerator": false
}]
]
}
Workaround 2
Move app initialization to some other file (I'm using src/
dir for source) and update root index.js
file.
N.B. require
main app code instead of import
because require
executed after.
For RN 0.56:
yarn add @babel/runtime@7.0.0-beta.47
Root index.js
import applyDecoratedDescriptor from '@babel/runtime/helpers/es6/applyDecoratedDescriptor'
import initializerDefineProperty from '@babel/runtime/helpers/es6/initializerDefineProperty'
Object.assign(babelHelpers, {
applyDecoratedDescriptor,
initializerDefineProperty,
});
require('./src');
For RN 0.57:
yarn add @babel/runtime@7.0.0
Root index.js
import applyDecoratedDescriptor from '@babel/runtime/helpers/esm/applyDecoratedDescriptor'
import initializerDefineProperty from '@babel/runtime/helpers/esm/initializerDefineProperty'
Object.assign(babelHelpers, {
applyDecoratedDescriptor,
initializerDefineProperty,
});
require('./src');
gitterofq, idris, scriptum, Jeepeng, mehulmpt and 28 moremehulmpt, hvaoc, todorone, NightFarmer, norbertsongin and 4 moregitterofq, mehulmpt, hvaoc, thientnc-ibl, todorone and 11 moregitterofq, mehulmpt, hvaoc, todorone, csotiriou and 13 more
Metadata
Metadata
Assignees
Labels
Impact: RegressionDescribes a behavior that used to work on a prior release, but stopped working recently.Describes a behavior that used to work on a prior release, but stopped working recently.JavaScriptPlatform: LinuxBuilding on Linux.Building on Linux.Resolution: LockedThis issue was locked by the bot.This issue was locked by the bot.Tech: Bundler 📦This issue is related to the bundler (Metro, Haul, etc) used.This issue is related to the bundler (Metro, Haul, etc) used.