@@ -15,6 +15,8 @@ export class PreviewAppController extends EventEmitter implements IPreviewAppCon
15
15
private devicesCanExecuteHmr : IDictionary < boolean > = { } ;
16
16
// holds HMR files per device in order to execute batch upload on fast updates
17
17
private devicesHmrFiles : IDictionary < string [ ] > = { } ;
18
+ // holds app files per device in order to execute batch upload on fast updates on failed HMR or --no-hmr
19
+ private devicesAppFiles : IDictionary < string [ ] > = { } ;
18
20
// holds the current HMR hash per device in order to watch the proper hash status on fast updates
19
21
private devicesCurrentHmrHash : IDictionary < string > = { } ;
20
22
@@ -148,30 +150,38 @@ export class PreviewAppController extends EventEmitter implements IPreviewAppCon
148
150
const currentSyncDeferPromise = deferPromise < void > ( ) ;
149
151
this . devicesLiveSyncChain [ device . id ] = currentSyncDeferPromise . promise ;
150
152
this . devicesCurrentHmrHash [ device . id ] = this . devicesCurrentHmrHash [ device . id ] || platformHmrData . hash ;
151
- this . devicesHmrFiles [ device . id ] = this . devicesHmrFiles [ device . id ] || [ ] ;
152
- this . devicesHmrFiles [ device . id ] . push ( ... files ) ;
153
- await previousSync ;
154
- if ( ! this . devicesHmrFiles [ device . id ] || ! this . devicesHmrFiles [ device . id ] . length ) {
155
- this . $logger . info ( "Skipping files sync. The changes are already batch transferred in a previous sync." ) ;
156
- currentSyncDeferPromise . resolve ( ) ;
157
- return ;
153
+ if ( data . useHotModuleReload ) {
154
+ this . devicesHmrFiles [ device . id ] = this . devicesHmrFiles [ device . id ] || [ ] ;
155
+ this . devicesHmrFiles [ device . id ] . push ( ... files ) ;
156
+ this . devicesAppFiles [ device . id ] = platformHmrData . fallbackFiles ;
157
+ } else {
158
+ this . devicesHmrFiles [ device . id ] = [ ] ;
159
+ this . devicesAppFiles [ device . id ] = files ;
158
160
}
159
161
160
- try {
162
+ await previousSync ;
161
163
162
- let executeHmrSync = false ;
164
+ try {
165
+ let canExecuteHmrSync = false ;
163
166
const hmrHash = this . devicesCurrentHmrHash [ device . id ] ;
164
167
this . devicesCurrentHmrHash [ device . id ] = null ;
165
168
if ( data . useHotModuleReload && hmrHash ) {
166
169
if ( this . devicesCanExecuteHmr [ device . id ] ) {
167
- executeHmrSync = true ;
168
- this . $hmrStatusService . watchHmrStatus ( device . id , hmrHash ) ;
170
+ canExecuteHmrSync = true ;
169
171
}
170
172
}
171
173
172
- const filesToSync = executeHmrSync ? this . devicesHmrFiles [ device . id ] : platformHmrData . fallbackFiles ;
174
+ const filesToSync = canExecuteHmrSync ? this . devicesHmrFiles [ device . id ] : this . devicesAppFiles [ device . id ] ;
175
+ if ( ! filesToSync || ! filesToSync . length ) {
176
+ this . $logger . info ( `Skipping files sync for device ${ this . getDeviceDisplayName ( device ) } . The changes are already batch transferred in a previous sync.` ) ;
177
+ currentSyncDeferPromise . resolve ( ) ;
178
+ return ;
179
+ }
180
+
173
181
this . devicesHmrFiles [ device . id ] = [ ] ;
174
- if ( executeHmrSync ) {
182
+ this . devicesAppFiles [ device . id ] = [ ] ;
183
+ if ( canExecuteHmrSync ) {
184
+ this . $hmrStatusService . watchHmrStatus ( device . id , hmrHash ) ;
175
185
await this . syncFilesForPlatformSafe ( data , { filesToSync } , platform , device ) ;
176
186
const status = await this . $hmrStatusService . getHmrStatus ( device . id , hmrHash ) ;
177
187
if ( ! status ) {
0 commit comments