在 angular2 快速入门指南中使用 lite-server 打开非默认浏览器
Opening non-default browser with lite-server in angular2 quick start guide
遵循 Angular 2 Quick Start guide 的 TypeScript 版本后,我想知道是否可行,如果可行,如何配置 lite-server 以启动默认浏览器以外的浏览器。
lite-server 似乎会接受命令行参数,通过 yargs.argv
提供给它。并且 yargs
似乎将尝试根据相当通用的标准解析命令行参数(即,如果标记以 --
开头,则它表示参数名称,否则表示参数值)以获得 argv
. lite-server 将尝试使用它从 argv
获得的 open
属性,这最终是通过 [启动进程的节点包之一] 启动浏览器的。节点开放? xdg-打开?不确定,现在对我来说并不那么重要,只要我的假设(基于对这些进程启动器中的几个的观察)是正确的,它们都可以选择使用一个参数来定义要启动的进程。如果省略,将使用默认浏览器,因为要打开的文件类型是 html,这就是发生的情况。
如果所有这些都是正确的,或者至少是它的要点,那么我似乎只需要指定 --open chrome
,例如(假设 chrome 在我的 PATH
- 在 win 机器上工作 btw),在 package.json
.
中定义的 lite
命令的末尾
所以像...
"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-server
实际上是在使用 browser-sync
,因此您应该可以使用 --browser
CLI command。
"lite:c" : "lite-server --browser chrome --open local"
更新
lite-server
项目已更新为包含可配置的浏览器选择。我只是为了历史目的而留下这个,并支持安德的回答。
lite-server
has been looking to address the issue 的创建者以某种标准方式配置所有 browser-sync
选项(建议使用 .rc
文件)。所以这个问题和答案在您阅读时可能已经过时了。
谢谢 Sasxa 指出这一点...
lite-server
is actually using browser-sync
...
这对于为这个特定问题提出解决方案至关重要(有点尴尬,我忽略了或注销为微不足道的 var sync = require('browser-sync').create();
... sync.init()
)。
但是,该答案将无法正常工作,因为这...
... so you should be able to use --browser
CLI command for that.
"lite:c" : "lite-server --browser chrome --open local"
...开箱即用。事实证明,lite-server
没有对 yargs
用于解析的 browser
参数做任何事情。我几乎编辑了 Sasxa 的答案,但认为它分歧太大,因为你真的不能使用 browser-sync
CLI。 lite-server
已经在使用 browser-sync
API。特别是,需要在此处指定 init()
is being called, and the browser
选项。关于 browser
命令行参数,Angular 2 快速入门指南的 package.json
和 browser-sync
之间完全脱节。
修复:
受 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 快速入门 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 实际启动。我需要使用 "chrome"
,而 docs 说“google chrome”...
// Open the site in Chrome
browser: "google chrome"
// Open the site in Chrome & Firefox
browser: ["google chrome", "firefox"]
命令行 open
参数 被 lite-server
使用,作为 startPath
传递给 browser-sync
。 browser
对于指定要启动的所需浏览器似乎是规范正确的,因为它最终在 browser-sync
中被该名称使用。此外,关于这一点,Sasxa 的回答是错误的,假设 --open local
会毫发无损地到达 browser-sync
。这实际上会导致路径损坏,因为它被 lite-server 消耗,并转换为类似 \local\index.html
的路径,而不是 \.\index.html
如果未指定。
最近的更改 (@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-server 维护者的意图。这是当前的 lite-server.js 文件以供参考。
对于Windows(和Mac)新手(而不是新手:):
您的第一个冲动可能是在您的项目目录中查找 'bs-config.json'。你不会找到它。你需要在项目根目录下创建一个文件并命名为bs-config.json.在其中,您可以根据上述答案指定您喜欢的浏览器 - 即:{"browser": "chrome"
}
原因是文件lite-server.js寻找上面的配置文件;如果找不到它,它会使用精简服务器默认设置,在 Windows 系统上默认使用 Internet Explorer。
在您的项目文件夹中创建一个文件名 "bs-config.json" 并将以下代码添加到该文件中:
{
"browser": ["chrome","firefox"] //to make chrome to default browser
}
对于 MacOS,我必须在 "bs-config.json" 文件中使用区分大小写的值:
{
"browser": "Google Chrome"
}
使用 Debian/Ubuntu 和 update-alternatives
我能够确认您可以通过此 command here. Currently lite-server
uses browser-sync
which uses opn
which bundles its own copy of a xdg-open
全局更改此过程。您可以使用
配置它
sudo update-alternatives --config x-www-browser
我发现它更可取。它对所有 angular2 示例都有效,并且对 OS 的其余部分也有效。您还可以让 link 以隐身方式打开(上面 link 中的说明)。
遵循 Angular 2 Quick Start guide 的 TypeScript 版本后,我想知道是否可行,如果可行,如何配置 lite-server 以启动默认浏览器以外的浏览器。
lite-server 似乎会接受命令行参数,通过 yargs.argv
提供给它。并且 yargs
似乎将尝试根据相当通用的标准解析命令行参数(即,如果标记以 --
开头,则它表示参数名称,否则表示参数值)以获得 argv
. lite-server 将尝试使用它从 argv
获得的 open
属性,这最终是通过 [启动进程的节点包之一] 启动浏览器的。节点开放? xdg-打开?不确定,现在对我来说并不那么重要,只要我的假设(基于对这些进程启动器中的几个的观察)是正确的,它们都可以选择使用一个参数来定义要启动的进程。如果省略,将使用默认浏览器,因为要打开的文件类型是 html,这就是发生的情况。
如果所有这些都是正确的,或者至少是它的要点,那么我似乎只需要指定 --open chrome
,例如(假设 chrome 在我的 PATH
- 在 win 机器上工作 btw),在 package.json
.
lite
命令的末尾
所以像...
"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-server
实际上是在使用 browser-sync
,因此您应该可以使用 --browser
CLI command。
"lite:c" : "lite-server --browser chrome --open local"
更新
lite-server
项目已更新为包含可配置的浏览器选择。我只是为了历史目的而留下这个,并支持安德的回答。
lite-server
has been looking to address the issue 的创建者以某种标准方式配置所有 browser-sync
选项(建议使用 .rc
文件)。所以这个问题和答案在您阅读时可能已经过时了。
谢谢 Sasxa 指出这一点...
lite-server
is actually usingbrowser-sync
...
这对于为这个特定问题提出解决方案至关重要(有点尴尬,我忽略了或注销为微不足道的 var sync = require('browser-sync').create();
... sync.init()
)。
但是,该答案将无法正常工作,因为这...
... so you should be able to use
--browser
CLI command for that.
"lite:c" : "lite-server --browser chrome --open local"
...开箱即用。事实证明,lite-server
没有对 yargs
用于解析的 browser
参数做任何事情。我几乎编辑了 Sasxa 的答案,但认为它分歧太大,因为你真的不能使用 browser-sync
CLI。 lite-server
已经在使用 browser-sync
API。特别是,需要在此处指定 init()
is being called, and the browser
选项。关于 browser
命令行参数,Angular 2 快速入门指南的 package.json
和 browser-sync
之间完全脱节。
修复:
受 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 快速入门 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 实际启动。我需要使用 "chrome"
,而 docs 说“google chrome”...
// Open the site in Chrome
browser: "google chrome"
// Open the site in Chrome & Firefox
browser: ["google chrome", "firefox"]
命令行 open
参数 被 lite-server
使用,作为 startPath
传递给 browser-sync
。 browser
对于指定要启动的所需浏览器似乎是规范正确的,因为它最终在 browser-sync
中被该名称使用。此外,关于这一点,Sasxa 的回答是错误的,假设 --open local
会毫发无损地到达 browser-sync
。这实际上会导致路径损坏,因为它被 lite-server 消耗,并转换为类似 \local\index.html
的路径,而不是 \.\index.html
如果未指定。
最近的更改 (@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-server 维护者的意图。这是当前的 lite-server.js 文件以供参考。
对于Windows(和Mac)新手(而不是新手:): 您的第一个冲动可能是在您的项目目录中查找 'bs-config.json'。你不会找到它。你需要在项目根目录下创建一个文件并命名为bs-config.json.在其中,您可以根据上述答案指定您喜欢的浏览器 - 即:{"browser": "chrome" }
原因是文件lite-server.js寻找上面的配置文件;如果找不到它,它会使用精简服务器默认设置,在 Windows 系统上默认使用 Internet Explorer。
在您的项目文件夹中创建一个文件名 "bs-config.json" 并将以下代码添加到该文件中:
{
"browser": ["chrome","firefox"] //to make chrome to default browser
}
对于 MacOS,我必须在 "bs-config.json" 文件中使用区分大小写的值:
{
"browser": "Google Chrome"
}
使用 Debian/Ubuntu 和 update-alternatives
我能够确认您可以通过此 command here. Currently lite-server
uses browser-sync
which uses opn
which bundles its own copy of a xdg-open
全局更改此过程。您可以使用
sudo update-alternatives --config x-www-browser
我发现它更可取。它对所有 angular2 示例都有效,并且对 OS 的其余部分也有效。您还可以让 link 以隐身方式打开(上面 link 中的说明)。