node.js - run - Abrir el navegador no predeterminado con el servidor lite en la guía de inicio rápido de angular2
run web server node js (7)
Después de haber seguido la versión de TypeScript de la guía de inicio rápido de Angular 2 , me preguntaba si es posible y, de ser así, cómo configurar el servidor lite para iniciar un navegador que no sea el predeterminado.
Parece que lite-server tomará yargs.argv
línea de comandos, que se le yargs.argv
través de yargs.argv
. Y parece que yargs
intentará analizar los yargs
línea de comandos basándose en estándares bastante comunes (es decir, si un token comienza con un --
, representa un nombre de argumento, de lo contrario es un valor de argumento) para obtener argv
. lite-server intentará usar la propiedad open
que obtiene de argv
, que es en última instancia, lo que inicia el navegador a través de [uno de los paquetes de nodo que inicia procesos]. nodo abierto? xdg -openar? No estoy seguro, no es tan importante para mí ahora, siempre y cuando mi suposición (basada en analizar varios de estos lanzadores de procesos) sea correcta, todos ellos optan opcionalmente por un argumento que defina el proceso de lanzamiento. Si se omite, el navegador predeterminado se usaría ya que el tipo de archivo para abrir es html, que es lo que sucede.
Si todo eso es correcto, o al menos lo esencial, entonces parece que solo necesito especificar --open chrome
, por ejemplo (asumiendo que Chrome está en mi PATH
- trabajando en una máquina de ganar por cierto), al final de la comando lite
definido en package.json
.
Así que algo como ...
"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/" "
},
Pido disculpas si esto parece inútil, pero no estaré en una computadora donde pueda probar esto por unos días, y necesito saber si tengo la respuesta y puedo dejar de investigar esto :). ¡Gracias!
Usando Debian / Ubuntu y update-alternatives
Pude confirmar que puede cambiar este proceso globalmente a través de este comando aquí . Actualmente, lite-server
usa browser-sync
que utiliza opn
que incluye su propia copia de un xdg-open
. Puedes configurarlo con,
sudo update-alternatives --config x-www-browser
Lo encontré preferible. Tiene efecto en todos los ejemplos de angular2 y también persiste en el resto del sistema operativo. También puede hacer que los enlaces se abran de incógnito (instrucciones en el enlace de arriba).
Cree un nombre de archivo "bs-config.json" en la carpeta de su proyecto y agregue el siguiente código a ese archivo:
{
"browser": ["chrome","firefox"] //to make chrome to default browser
}
Los cambios recientes (@ 2.1.0) le permiten configurar sus configuraciones, incluidos los navegadores, a través de bs-config.json
:
{
"browser": "chrome"
}
o
{
"browser": ["chrome","firefox"]
}
Si desea configurar scripts separados para cada brida, puede hacer lo siguiente en su 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"
}
}
Si bien no es la mejor solución, ya que tiene que copiar y mantener su configuración en varios archivos, parece ser lo que pretende el mantenedor del servidor lite. Aquí está el archivo lite-server.js actual para referencia.
Para MacOS, tuve que usar el valor que distingue entre mayúsculas y minúsculas en el archivo "bs-config.json":
{
"browser": "Google Chrome"
}
Para los principiantes de Windows (y Mac) (y no tanto): su primer impulso puede ser buscar ''bs-config.json'' dentro del directorio de su proyecto. No lo encontraras Debe crear un archivo en el directorio del proyecto raíz y denominarlo bs-config.json . Dentro de él, especifique el navegador de su preferencia, según la respuesta anterior -ie ,: {"browser": "chrome"}
La razón es que el archivo lite-server.js busca el archivo de configuración anterior; si no lo encuentra, utiliza los valores predeterminados de servidor lite, predeterminando Internet Explorer en los sistemas Windows.
lite-server
realidad usa browser-sync
, por lo que debería poder usar el --browser
CLI --browser
para eso.
"lite:c" : "lite-server --browser chrome --open local"
ACTUALIZAR
El proyecto lite-server
se ha actualizado para incorporar una selección de navegador configurable. Solo lo dejo para propósitos históricos, y apoyo la respuesta de Ender.
El creador de lite-server
ha estado buscando resolver el problema de configurar todas browser-sync
opciones de browser-sync
alguna manera estándar (se .rc
archivo .rc
). Por lo tanto, esta pregunta y respuesta pueden estar obsoletas cuando las lea.
Gracias Sasxa por señalar esto ...
lite-server
realidad está usando elbrowser-sync
...
Esto fue fundamental para encontrar una solución para este problema en particular (es un poco vergonzoso que haya pasado por alto o que haya sido descartado ya que var sync = require(''browser-sync'').create();
sync.init()
var sync = require(''browser-sync'').create();
... sync.init()
).
Sin embargo, esa respuesta no funcionará como está porque esto ...
... por lo que debería ser capaz de usar el
--browser
CLI--browser
para eso.
"lite:c" : "lite-server --browser chrome --open local"
... no funciona fuera de la caja. Resulta que lite-server
no está haciendo nada con el argumento del browser
que yargs
se utiliza para analizar. Casi había editado la respuesta de Sasxa, pero decidí que divergía demasiado, ya que realmente no se puede usar la CLI de browser-sync
del browser-sync
. lite-server
ya está utilizando la API de browser-sync
. En particular, se está llamando a init()
, y la opción del browser
debe estar especificada allí. Existe una desconexión completa entre el package.json
la guía de inicio rápido de Angular 2 y browser-sync
del browser
con respecto a la línea de comando del browser
arg.
La solución:
De modo inspirado en la respuesta de Sasxa, el argumento del browser
pasará a yargs.argv
, con chrome
valor.
lite-server.js
tendría que ser modificado para pasarlo a browser-sync
. Esto se puede agregar como una propiedad en el objeto de 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
};
Luego, cuando se llama a init()
-sync del browser
, especifique la opción del 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
});
Ahora, volviendo al package.json
inicio rápido de Angular package.json
, se pueden usar los siguientes valores de argumento para el argumento del browser
:
-
chrome
-
firefox
-
iexplore
al igual que...
"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/" "
},
Algunos pensamientos finales
Es posible que deba usar "google chrome"
como valor del browser
para que Chrome se inicie realmente. Necesitaba usar "chrome"
, mientras que los browser dicen "google chrome" ...
// Abrir el sitio en Chrome
browser: "google chrome"
// Abre el sitio en Chrome & Firefox
browser: ["google chrome", "firefox"]
El argumento de open
línea de comandos está siendo utilizado por lite-server
, como parte de la startPath
que se pasa a browser-sync
. browser
parece canónicamente correcto para especificar el navegador que se desea iniciar, ya que, en última instancia, ese nombre lo utiliza en browser-sync
. Además, en lo que respecta a esto, la respuesta de Sasxa fue incorrecta al suponer que --open local
haría que browser-sync
--open local
ilesa. Eso realmente causará una ruta dañada, porque es consumida por lite-server y transformada en una ruta como /local/index.html
, en lugar de /./index.html
si no se especifica.