diff --git a/lib/controllers/prepare-controller.ts b/lib/controllers/prepare-controller.ts index 9d6a85195d..eefdef791c 100644 --- a/lib/controllers/prepare-controller.ts +++ b/lib/controllers/prepare-controller.ts @@ -127,6 +127,21 @@ export class PrepareController extends EventEmitter { } private async startNativeWatcherWithPrepare(platformData: IPlatformData, projectData: IProjectData, prepareData: IPrepareData): Promise { + let newNativeWatchStarted = false; + let hasNativeChanges = false; + + if (prepareData.watchNative) { + newNativeWatchStarted = await this.startNativeWatcher(platformData, projectData); + } + + if (newNativeWatchStarted) { + hasNativeChanges = await this.$prepareNativePlatformService.prepareNativePlatform(platformData, projectData, prepareData); + } + + return hasNativeChanges; + } + + private async startNativeWatcher(platformData: IPlatformData, projectData: IProjectData): Promise { if (this.watchersData[projectData.projectDir][platformData.platformNameLowerCase].nativeFilesWatcher) { return false; } @@ -155,9 +170,7 @@ export class PrepareController extends EventEmitter { this.watchersData[projectData.projectDir][platformData.platformNameLowerCase].nativeFilesWatcher = watcher; - const hasNativeChanges = await this.$prepareNativePlatformService.prepareNativePlatform(platformData, projectData, prepareData); - - return hasNativeChanges; + return true; } @hook('watchPatterns') diff --git a/lib/controllers/preview-app-controller.ts b/lib/controllers/preview-app-controller.ts index 447e86f429..79fb137586 100644 --- a/lib/controllers/preview-app-controller.ts +++ b/lib/controllers/preview-app-controller.ts @@ -99,7 +99,7 @@ export class PreviewAppController extends EventEmitter implements IPreviewAppCon data.env = data.env || {}; data.env.externals = this.$previewAppPluginsService.getExternalPlugins(device); - const prepareData = this.$prepareDataService.getPrepareData(data.projectDir, device.platform.toLowerCase(), { ...data, nativePrepare: { skipNativePrepare: true }, watch: true }); + const prepareData = this.$prepareDataService.getPrepareData(data.projectDir, device.platform.toLowerCase(), { ...data, nativePrepare: { skipNativePrepare: true }, watch: true, watchNative: false }); await this.$prepareController.prepare(prepareData); try { diff --git a/lib/data/prepare-data.ts b/lib/data/prepare-data.ts index c24f6fcc0f..d13ed4d01a 100644 --- a/lib/data/prepare-data.ts +++ b/lib/data/prepare-data.ts @@ -5,6 +5,7 @@ export class PrepareData extends ControllerDataBase { public hmr: boolean; public env: any; public watch?: boolean; + public watchNative: boolean = true; constructor(public projectDir: string, public platform: string, data: any) { super(projectDir, platform, data); @@ -16,6 +17,9 @@ export class PrepareData extends ControllerDataBase { hmr: data.hmr || data.useHotModuleReload }; this.watch = data.watch; + if (_.isBoolean(data.watchNative)) { + this.watchNative = data.watchNative; + } } } diff --git a/lib/definitions/prepare.d.ts b/lib/definitions/prepare.d.ts index 43f93ae225..9ad8f0a3c1 100644 --- a/lib/definitions/prepare.d.ts +++ b/lib/definitions/prepare.d.ts @@ -7,6 +7,7 @@ declare global { hmr: boolean; env: any; watch?: boolean; + watchNative: boolean } interface IiOSCodeSigningData { diff --git a/test/controllers/prepare-controller.ts b/test/controllers/prepare-controller.ts index ef0b4a0fd0..c8376c6f16 100644 --- a/test/controllers/prepare-controller.ts +++ b/test/controllers/prepare-controller.ts @@ -9,7 +9,8 @@ const prepareData = { release: false, hmr: false, env: {}, - watch: true + watch: true, + watchNative: true }; let isCompileWithWatchCalled = false;