Skip to content

Commit 3b1760d

Browse files
vonovakfacebook-github-bot
authored andcommitted
improve dev mode and HMR interop (#24377)
Summary: Motivation is following - I'm sure many people encountered this because it has been like this for a long time. 1 . you're developing something on android, HMR and dev mode is enabled 2 . you go to dev settings, you disable dev mode because you want to see how something behaves 3 . you reload the app because that's what is required for the change to take effect 4 . you wait for the bundle to be compiled and served, and when that is done, you get an error message about HMR not being a registered callable module - because HMR is not available when `__DEV__ === false` (todo screenshot) this fixes the described case by checking if HMR is enabled and dev mode disabled when reloading (step 3) and disables HMR in that case. this also fixes the case when dev mode is disabled and without knowing it, you try to enable HRM (will enable both dev hmr and dev mode). [Android] [Changed] - improve developer experience around Dev mode and HMR interop Pull Request resolved: #24377 Differential Revision: D14890695 Pulled By: cpojer fbshipit-source-id: 95b6ff4131c6d05a32aadd09a9d5ed11f602122c
1 parent 9b63b50 commit 3b1760d

File tree

3 files changed

+13
-1
lines changed

3 files changed

+13
-1
lines changed

ReactAndroid/src/main/java/com/facebook/react/devsupport/DevInternalSettings.java

+4
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,10 @@ public boolean isJSDevModeEnabled() {
8888
return mPreferences.getBoolean(PREFS_JS_DEV_MODE_DEBUG_KEY, true);
8989
}
9090

91+
public void setJSDevModeEnabled(boolean value) {
92+
mPreferences.edit().putBoolean(PREFS_JS_DEV_MODE_DEBUG_KEY, value).apply();
93+
}
94+
9195
@Override
9296
public boolean isJSMinifyEnabled() {
9397
return mPreferences.getBoolean(PREFS_JS_MINIFY_DEBUG_KEY, false);

ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerImpl.java

+8
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,10 @@ public void showDevOptionsDialog() {
459459
new DevOptionHandler() {
460460
@Override
461461
public void onOptionSelected() {
462+
if (!mDevSettings.isJSDevModeEnabled() && mDevSettings.isHotModuleReplacementEnabled()) {
463+
Toast.makeText(mApplicationContext, "HMR cannot be enabled when Dev mode is off. Disabling HMR...", Toast.LENGTH_LONG).show();
464+
mDevSettings.setHotModuleReplacementEnabled(false);
465+
}
462466
handleReloadJS();
463467
}
464468
});
@@ -509,6 +513,10 @@ public void onOptionSelected() {
509513
new DevOptionHandler() {
510514
@Override
511515
public void onOptionSelected() {
516+
if (!mDevSettings.isHotModuleReplacementEnabled() && !mDevSettings.isJSDevModeEnabled()) {
517+
Toast.makeText(mApplicationContext, "You're trying to enable HMR while Dev mode is off. Turning both HMR and the Dev mode on...", Toast.LENGTH_LONG).show();
518+
mDevSettings.setJSDevModeEnabled(true);
519+
}
512520
mDevSettings.setHotModuleReplacementEnabled(!mDevSettings.isHotModuleReplacementEnabled());
513521
handleReloadJS();
514522
}

ReactAndroid/src/main/res/devsupport/xml/rn_dev_preferences.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<CheckBoxPreference
1111
android:key="js_dev_mode_debug"
1212
android:title="JS Dev Mode"
13-
android:summary="Load JavaScript bundle with __DEV__ = true for easier debugging. Disable for performance testing. Reload for the change to take effect."
13+
android:summary="Load JavaScript bundle with __DEV__ = true for easier debugging. Disable for performance testing. Reload for the change to take effect."
1414
android:defaultValue="true"
1515
/>
1616
<CheckBoxPreference

0 commit comments

Comments
 (0)