From 2b1b2fff5cdd3c84b828cc61d5fc6d5828f4facc Mon Sep 17 00:00:00 2001 From: Sergey Zolotarev Date: Tue, 10 Jan 2017 11:43:54 +0600 Subject: [PATCH] Automatically determine browser executable path This should fix the following issue: https://github.com/driftyco/ionic-cli/issues/1840 --- lib/serve.js | 38 ++++++++++++++++++++++++++++++++++++-- package.json | 1 + 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/lib/serve.js b/lib/serve.js index 73c21e3..a8b8545 100644 --- a/lib/serve.js +++ b/lib/serve.js @@ -19,6 +19,10 @@ var Utils = require('./utils'); var events = require('./events'); var ports = require('./ports'); var log = require('./logging').logger; +var os = require('os'); +var _ = require('underscore'); +var hasbin = require('hasbin'); +var util = require('util'); var Serve = module.exports; @@ -30,6 +34,20 @@ var DEFAULT_LIVE_RELOAD_PORT = 35729; var IONIC_LAB_URL = '/ionic-lab'; var IONIC_ANGULAR_URL = '/angular.min.js'; +var DEFAULT_PLATFORM_BROWSER_PATHS = { + darwin: { + chrome: '/Applications/Google Chrome.app', + safari: '/Applications/Safari.app', + firefox: '/Applications/Firefox.app' + }, + linux: { + chrome: [ + 'google-chrome', + 'chrome' + ] + } +}; + Serve.listenForServerCommands = function listenForServerCommands(options) { var readline = require('readline'); @@ -236,8 +254,24 @@ Serve.openBrowser = function openBrowser(options) { openUrl.push('?ionicplatform=', options.platform); } + var browserPath; + if (!hasbin.sync(options.browser)) { + var platformBrowsers = DEFAULT_PLATFORM_BROWSER_PATHS[os.platform()]; + if (platformBrowsers) { + var defaultBrowserPath = platformBrowsers[options.browser]; + if (util.isString(defaultBrowserPath)) { + browserPath = defaultBrowserPath; + } else if (util.isArray(defaultBrowserPath)) { + browserPath = _.find(defaultBrowserPath, function(path) { + return fs.existsSync(path) || hasbin.sync(path); + }); + } + } + } + try { - open(openUrl.join(''), options.browser); + var browser = browserPath || options.browser; + open(openUrl.join(''), browser); } catch (ex) { log.error('Error opening the browser - ', ex); } @@ -872,7 +906,7 @@ Serve.getAddress = function(options) { return q.promise; } else if (addresses.length > 1) { - + if (!options.isPlatformServe) { addresses.push({ address: 'localhost' diff --git a/package.json b/package.json index fd37e85..722b845 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "finalhandler": "0.2.0", "form-data": "0.1.4", "glob-watcher": "3.0.0", + "hasbin": "^1.2.3", "open": "0.0.5", "optimist": "0.6.0", "os-name": "^2.0.1",