Node.js 在angular2快速入门指南中使用lite服务器打开非默认浏览器

Node.js 在angular2快速入门指南中使用lite服务器打开非默认浏览器,node.js,angular,launching,Node.js,Angular,Launching,遵循了的TypeScript版本之后,我想知道是否可能,如果可能,如何配置lite服务器以启动默认浏览器以外的浏览器 似乎lite服务器将接受命令行args,通过yargs.argv提供给它。而且,yargs似乎会尝试基于相当常见的标准(即,如果令牌以--开头,则表示参数名称,否则表示参数值)来解析命令行args,以获得argv。lite服务器将尝试使用它从argv获得的open属性,该属性最终通过[启动进程的节点包之一]启动浏览器。节点打开了吗?xdg-开放?不确定,只要我的假设(基于对几个流

遵循了的TypeScript版本之后,我想知道是否可能,如果可能,如何配置lite服务器以启动默认浏览器以外的浏览器

似乎lite服务器将接受命令行args,通过
yargs.argv
提供给它。而且,
yargs
似乎会尝试基于相当常见的标准(即,如果令牌以
--
开头,则表示参数名称,否则表示参数值)来解析命令行args,以获得
argv
。lite服务器将尝试使用它从
argv
获得的
open
属性,该属性最终通过[启动进程的节点包之一]启动浏览器。节点打开了吗?xdg-开放?不确定,只要我的假设(基于对几个流程启动器的研究)是正确的,它们都可以选择使用一个参数来定义要启动的流程,那么现在对我来说就没有那么重要了。如果省略,将使用默认浏览器,因为要打开的文件类型是html,这就是所发生的情况

如果所有这些都是正确的,或者至少其要点是正确的,那么我似乎只需要在
package.json
中定义的
lite
命令末尾指定
--打开chrome
,例如(假设chrome在我的
路径中
--在win machine btw上工作)

所以有点像

"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\" "
},

如果这看起来毫无意义,我很抱歉,但我不会在电脑前测试几天,我需要知道我是否有答案,是否可以停止研究:)。谢谢

lite服务器
实际上正在使用
浏览器同步
,因此您应该能够使用
--browser
来实现这一点

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

更新

lite服务器
项目已更新,以包含可配置的浏览器选择。我只是出于历史目的,支持安德的回答


lite服务器
的创建者,以某种标准方式配置所有
浏览器同步
选项(
.rc
文件建议)。所以,当你读到这个问题和答案时,它可能已经过时了


感谢Sasxa指出这一点


lite服务器
实际上正在使用
浏览器同步

这对于为这个特定的问题找到解决方案是至关重要的(我忽略了这一点,或者把它当作琐碎的
var sync=require('browser-sync').create();
sync.init()
),这有点尴尬)

然而,这个答案不会像现在这样起作用,因为

。。。因此,您应该能够使用
--browser

"lite:c" : "lite-server --browser chrome --open local"
“lite:c”:“lite服务器--浏览器chrome--打开本地”

…不是开箱即用的。事实证明,
lite服务器
并没有使用
browser
参数执行任何操作,而
yargs
用于解析。我几乎编辑了Sasxa的答案,但认为它偏离太多,因为您确实无法使用
浏览器同步
CLI<代码>lite服务器已在使用
浏览器同步
API。特别是,正在调用,需要在其中指定选项。Angular 2 Quick start guide的
package.json与
浏览器同步
命令行参数之间存在完全断开的连接


修复方法: 受Sasxa答案的启发,
browser
参数将传递给
yargs.argv
,值为
chrome

lite server.js
必须进行修改才能将其传递给
浏览器同步
。这可以添加为
选项
对象上的属性

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
  };
然后,当调用浏览器同步的
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”
作为
浏览器
值,以使chrome真正启动。我需要使用
“chrome”
,而“googlechrome”

//在Chrome中打开站点

浏览器:“谷歌浏览器”

//在Chrome和Firefox中打开站点

浏览器:[“谷歌浏览器”、“火狐”]

命令行
open
参数正由
lite服务器使用,作为传递给
浏览器同步的
开始路径的一部分
browser
对于指定要启动的所需浏览器来说,似乎在规范上是正确的,因为在
browser sync
中该名称最终会使用它。此外,关于这一点,Sasxa的回答是不正确的,因为它假设
--open local
会使浏览器同步
毫发无损。这实际上会导致路径损坏,因为lite服务器会使用它,并将其转换为类似
\local\index.html
的路径,而不是
\.\index.html
(如果未指定)。

最近的更改(@2.1.0)允许您通过
bs config.json
设置配置,包括浏览器:

{
  "browser": "chrome"
}
{
  "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"
  }
}

如果要为每个broswer设置单独的脚本,可以在
包.json中执行以下操作:

{
  "browser": "chrome"
}
{
  "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服务器维护人员的意图。以下是当前文件供参考。

适用于Windows(和Mac)新手(不是很新手:): 您的第一个冲动可能是在项目目录中查找“bs config.json”。你不会找到的。你需要检查一下
sudo update-alternatives --config x-www-browser