Skip to content

Commit 0da50ac

Browse files
committed
feat(cordova): auto-forward port when using --native-run
1 parent 89b6d33 commit 0da50ac

File tree

2 files changed

+20
-6
lines changed
  • packages/ionic/src

2 files changed

+20
-6
lines changed

packages/ionic/src/commands/cordova/run.ts

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { ERROR_SHELL_COMMAND_NOT_FOUND, LOGGER_LEVELS, OptionGroup, ShellCommand
22
import { onBeforeExit, processExit, sleepForever } from '@ionic/cli-framework/utils/process';
33
import chalk from 'chalk';
44
import * as path from 'path';
5+
import * as url from 'url';
56

67
import { CommandInstanceInfo, CommandLineInputs, CommandLineOptions, CommandMetadata, CommandMetadataOption, CommandPreRun, IShellRunOptions } from '../../definitions';
78
import { COMMON_BUILD_COMMAND_OPTIONS, build } from '../../lib/build';
@@ -202,13 +203,15 @@ ${chalk.cyan('[1]')}: ${chalk.bold('https://ionicframework.com/docs/developer-re
202203
options['emulator'] = true;
203204
}
204205
}
206+
205207
if (options['native-run']) {
206208
const args = createNativeRunListArgs(inputs, options);
207209
await this.nativeRun(args);
208210
} else {
209211
const args = filterArgumentsForCordova(metadata, options);
210212
await this.runCordova(['run', ...args.slice(1)], {});
211213
}
214+
212215
throw new FatalException('', 0);
213216
}
214217

@@ -234,16 +237,17 @@ ${chalk.cyan('[1]')}: ${chalk.bold('https://ionicframework.com/docs/developer-re
234237

235238
if (options['livereload']) {
236239
let livereloadUrl = options['livereload-url'] ? String(options['livereload-url']) : undefined;
240+
237241
if (!livereloadUrl) {
238242
// TODO: use runner directly
239243
const details = await serve({ flags: this.env.flags, config: this.env.config, log: this.env.log, prompt: this.env.prompt, shell: this.env.shell, project: this.project }, inputs, generateOptionsForCordovaBuild(metadata, inputs, options));
240244

241-
if (details.externallyAccessible === false) {
245+
if (details.externallyAccessible === false && !options['native-run']) {
242246
const extra = LOCAL_ADDRESSES.includes(details.externalAddress) ? '\nEnsure you have proper port forwarding setup from your device to your computer.' : '';
243247
this.env.log.warn(`Your device or emulator may not be able to access ${chalk.bold(details.externalAddress)}.${extra}\n\n`);
244248
}
245249

246-
livereloadUrl = `${details.protocol || 'http'}://${details.externalAddress}:${details.port}`;
250+
livereloadUrl = `${details.protocol || 'http'}://${options['native-run'] ? details.localAddress : details.externalAddress}:${details.port}`;
247251
}
248252

249253
const conf = await loadConfigXml(this.integration);
@@ -273,7 +277,7 @@ ${chalk.cyan('[1]')}: ${chalk.bold('https://ionicframework.com/docs/developer-re
273277

274278
const platform = inputs[0];
275279
const packagePath = getPackagePath(conf.getProjectInfo().name, platform, options['emulator'] as boolean);
276-
const nativeRunArgs = createNativeRunArgs(packagePath, platform, options);
280+
const nativeRunArgs = createNativeRunArgs(packagePath, platform, livereloadUrl, options);
277281
await this.nativeRun(nativeRunArgs);
278282
} else {
279283
await this.runCordova(filterArgumentsForCordova(metadata, options), { stream: cordovalogws });
@@ -325,9 +329,10 @@ ${chalk.cyan('[1]')}: ${chalk.bold('https://ionicframework.com/docs/developer-re
325329
}
326330
}
327331

328-
function createNativeRunArgs(packagePath: string, platform: string, options: CommandLineOptions): string[] {
332+
function createNativeRunArgs(packagePath: string, platform: string, livereloadUrl: string, options: CommandLineOptions): string[] {
329333
const opts = [platform, '--app', packagePath];
330-
const target = options['target'] as string;
334+
const target = options['target'] ? String(options['target']) : undefined;
335+
331336
if (target) {
332337
opts.push('--target', target);
333338
} else if (options['emulator']) {
@@ -338,10 +343,19 @@ function createNativeRunArgs(packagePath: string, platform: string, options: Com
338343
opts.push('--connect');
339344
}
340345

346+
if (!options['livereload-url']) {
347+
const { port } = url.parse(livereloadUrl);
348+
opts.push('--forward', `${port}:${port}`);
349+
}
350+
341351
if (options['json']) {
342352
opts.push('--json');
343353
}
344354

355+
if (options['verbose']) {
356+
opts.push('--verbose');
357+
}
358+
345359
return opts;
346360
}
347361

packages/ionic/src/lib/integrations/cordova/utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export function generateOptionsForCordovaBuild(metadata: CommandMetadata, inputs
4949

5050
return {
5151
...results,
52-
externalAddressRequired: true,
52+
externalAddressRequired: options['native-run'] ? false : true,
5353
nobrowser: true,
5454
engine: 'cordova',
5555
platform: platform ? platform : (options['platform'] ? String(options['platform']) : undefined),

0 commit comments

Comments
 (0)