Подтвердить что ты не робот

Открытие браузера не по умолчанию с Lite-сервером в angular2 краткое руководство по началу работы

Следуя версии TypeScript Angular 2 Краткое руководство по началу работы, мне было интересно, возможно ли это, и если да, то как настроить Lite -сервера для запуска браузера, отличного от стандартного.

Кажется, что lite-server будет принимать аргументы командной строки, которые будут переданы ему через yargs.argv. И кажется, что yargs попытается проанализировать аргументы командной строки на основе довольно общих стандартов (т.е. Если токен начинается с --, он представляет имя аргумента, в противном случае значение аргумента), чтобы получить argv. lite-server будет пытаться использовать свойство open, которое получает от argv, что в конечном итоге запускает браузер через [один из пакетов node, который запускает процессы]. node -open? xdg -open? Не уверен, не очень важно для меня прямо сейчас, пока мое предположение (основанное на взгляде на несколько из этих пусковых установок процесса) является правильным, что все они необязательно принимают аргумент, определяющий процесс запуска. Если этот параметр опущен, браузер по умолчанию будет использоваться, так как тип файла для открытия - это html, что и происходит.

Если все это правильно или, по крайней мере, суть его, то мне кажется, что мне просто нужно указать --open chrome, например (предполагая, что хром находится в моем PATH - работает на машине win btw), на конец команды lite, заданной в package.json.

Так что-то вроде...

"scripts": {
    "tsc": "tsc",
    "tsc:w": "tsc -w",
    "lite": "lite-server",
    "lite:c": "lite-server --open chrome",
    "lite:f": "lite-server --open firefox ",
    "start": "concurrent \"npm run tsc:w\" \"npm run lite\" "
},

Извиняюсь, если это кажется безумным, но я не буду на компьютере, где я могу проверить это на несколько дней, и мне нужно знать, есть ли у меня ответ, и я могу прекратить его изучать:). Спасибо!

4b9b3361

Ответ 1

Недавние изменения (@2.1.0) позволяют вам устанавливать ваши конфиги, включая браузер (ы), через bs-config.json:

{
  "browser": "chrome"
}

или

{
  "browser": ["chrome","firefox"]
}

Если вы хотите настроить отдельные сценарии для каждого браузера, вы можете сделать следующее в package.json:

{
  "scripts": {
    "lite": "lite-server",
    "lite:ff": "lite-server --c bs-firefox.json",
    "lite:c": "lite-server --c bs-chrome.json",
    "lite:ie": "lite-server --c bs-ie.json",
    "lite:all": "lite-server --c bs-all.json"
  }
}

Хотя это не лучшее решение, так как вам нужно копировать и поддерживать свою конфигурацию в нескольких файлах, похоже, это то, что предназначено для поддерживающего Lite-сервера. Здесь используется текущий lite-server.js файл.

Ответ 2

UPDATE

Проект lite-server обновлен, чтобы включить настраиваемый выбор браузера. Я оставляю это только в исторических целях и поддерживаю ответ получателя.


Создатель lite-server искал проблему для настройки всех параметров browser-sync стандартным способом (.rc файл предлагается). Таким образом, этот вопрос и ответ могут быть устаревшими к тому моменту, когда вы его прочитали.


Спасибо Sasxa за то, что указали это...

lite-server фактически использует browser-sync...

Это было важно для решения этой конкретной проблемы (немного смущающей, что я забыл или списал как тривиальный var sync = require('browser-sync').create();... sync.init()).

Однако этот ответ не будет работать, потому что это...

... поэтому вы можете использовать --browser команду CLI для этого.

"lite:c" : "lite-server --browser chrome --open local"

... не работает из коробки. Как оказалось, lite-server ничего не делает с аргументом browser, который yargs используется для синтаксического анализа. Я почти отредактировал ответ Sasxa, но решил, что он слишком сильно расходится, поскольку вы действительно не можете использовать CLI browser-sync. lite-server уже использует API browser-sync. В частности, вызывается init(), а browser необходимо указать там. Существует полное отключение между Angular 2 Краткое руководство package.json и browser-sync в отношении командной строки browser.


Исправление:

Вдохновленный ответом Sasxa, аргумент browser будет передан в yargs.argv со значением chrome.

lite-server.js необходимо будет изменить, чтобы передать его до browser-sync. Это может быть добавлено как свойство объекта options...

var options =
  {
    openPath: openPath,
    files: argv.files ? argv.files : [
      openPath + '/**/*.html',
      openPath + '/**/*.css',
      openPath + '/**/*.js'
    ],
    baseDir: argv.baseDir || './',
    fallback: '/' + openPath + '/index.html',
    browser: argv.browser || "default" // add this line, ~line 24
  };

Затем, когда вызывается функция browser-sync init(), укажите параметр browser.

sync.init({
  port: argv.port || 3000,
  server: {
    baseDir: options.baseDir,
    middleware: [
      log(),
      historyFallback({ index: options.fallback })
    ]
  },
  files: options.files,
  browser: options.browser // add this line, ~line 49
});

Теперь, возвращаясь к Angular 2 Quick Start package.json, для аргумента browser могут использоваться следующие значения аргументов:

  • chrome
  • firefox
  • iexplore

вот так...

"scripts": {
    "tsc": "tsc",
    "tsc:w": "tsc -w",

    "lite": "lite-server",
    "lite:c": "lite-server --browser \"chrome\"",
    "lite:ff": "lite-server --browser \"firefox\"",
    "lite:ie": "lite-server --browser \"iexplore\"",
    "lite:garbage": "lite-server --browser \"garbage\"",

    "start": "concurrent \"npm run tsc:w\" \"npm run lite:c\" ",

    "//": "start default browser:",
    "//": "concurrent \"npm run tsc:w\" \"npm run lite\" ",
    "//": "start chrome:",
    "//": "concurrent \"npm run tsc:w\" \"npm run lite:c\" ",
    "//": "start firefox:",
    "//": "concurrent \"npm run tsc:w\" \"npm run lite:ff\" ",
    "//": "start ie:",
    "//": "concurrent \"npm run tsc:w\" \"npm run lite:ie\" ",
    "//": "if you want to see an invalid browser arg value, try...",
    "//": "concurrent \"npm run tsc:w\" \"npm run lite:garbage\" "
},

Некоторые последние мысли

Вам может потребоваться использовать "google chrome" как значение browser, чтобы получить хром для запуска. Мне нужно было использовать "chrome", а docs сказать "google chrome"...

//Откройте сайт в Chrome

browser: "google chrome"

//Откройте сайт в Chrome и Firefox

browser: ["google chrome", "firefox"]

Аргумент командной строки open используется lite-server, как часть startPath, который передается в browser-sync. browser представляется канонически корректным для указания запускающего браузера, так как в конечном итоге это имя используется в browser-sync. Кроме того, в связи с этим Sasxa ответ был неверным, если предположить, что --open local сделает его browser-sync невредимым. Это фактически вызовет поврежденный путь, потому что он потребляется lite-сервером и преобразуется в путь, например \local\index.html, вместо \.\index.html, если он не указан.

Ответ 3

lite-server на самом деле использует browser-sync, поэтому вы можете использовать --browser команду CLI для этого.

"lite:c" : "lite-server --browser chrome --open local"

Ответ 4

Сделайте имя файла "bs-config.json" в папке проекта и добавьте ниже код в этот файл:

{
"browser": ["chrome","firefox"]         //to make chrome to default browser
}

Ответ 5

Для MacOS мне пришлось использовать значение, чувствительное к регистру, в файле "bs-config.json":

{
  "browser": "Google Chrome"
}

Ответ 6

Для новичков Windows (и Mac) (и не так новичков:): Первым импульсом может быть поиск "bs-config.json" в каталоге проекта. Вы не найдете его. Вам нужно создать файл в корневом каталоге проекта и называть его bs-config.json. В нем вы указываете браузер своих предпочтений в соответствии с приведенным выше ответом -i.e.,: { "Browser": "chrome" }

Причина в том, что файл lite-server.js ищет вышеупомянутый файл конфигурации; если он не находит его, он использует значения по умолчанию для литов-серверов, по умолчанию использует Internet Explorer в системах Windows.

Ответ 7

Использование Debian/Ubuntu и update-alternatives

Мне удалось подтвердить, что вы можете изменить этот процесс по всему миру с помощью этой здесь. В настоящее время lite-server использует browser-sync, который использует opn который связывает свою собственную копию xdg-open. Вы можете настроить это с помощью

sudo update-alternatives --config x-www-browser

Я счел это предпочтительным. Он действует на все angular2 примеры и сохраняется и для остальной части ОС. Вы также можете сделать ссылки открытыми в инкогнито (инструкции в ссылке выше).