create-react-app:如何使用特定的浏览器进行“npm start”?

112

npm start

运行此命令将在默认浏览器(对我来说是Firefox)上启动React服务器。我喜欢使用Firefox浏览网页,但是在Web开发中更喜欢Chrome浏览器的开发者工具。有没有办法强制“npm start”在Chrome浏览器上启动服务器,而不需要把默认浏览器改为Chrome?我正在使用Windows的Bash。

编辑:我用"create-react-app"创建了我的服务器,这会在"packages.json"文件中添加一个"npm start"的脚本。该脚本将使用默认浏览器启动本地服务器。如何修改由"create-react-app"添加的脚本,使其启动其他浏览器?


也许你可以使用 spawn 命令打开 Google Chrome 并输入你的 URL? - NoobTW
你也可以使用 opn-cli https://github.com/sindresorhus/opn-cli,以 opn http://localhost:3000 -- 'google chrome' 的方式打开网页。 - NoobTW
1
我们是否应该编辑问题标题以提到“create-react-app”? - dcorking
1
@dcorking 我没有意识到我可以编辑标题。已经修改,谢谢! - Osama Qarem
@MarkC. - 从技术低层面来看,这可能是一个重复的问题,但是出于参考的目的,值得保留这个问题,因为它服务于react.js社区(在这个社区中,大多数时间,开发工作流程都是结构化的,存在样板代码,并且由此产生其他配置相关的考虑,例如是否弹出react应用程序)。 - Eliran Malka
显示剩余4条评论
19个回答

95

可以通过设置 BROWSER 环境变量来实现。

也可以在终端中直接执行以下命令: BROWSER=chrome npm start

这在 高级配置文档 中有详细描述:

默认情况下,Create React App 将打开默认的系统浏览器,在 macOS 上优先选择 Chrome。指定浏览器以覆盖此行为,或将其设置为 none 以完全禁用它。如果需要自定义浏览器启动方式,可以指定一个节点脚本。任何传递给 npm start 的参数也将传递给此脚本,并且您应用程序服务的 URL 将是最后一个参数。您的脚本文件名必须具有 .js 扩展名。

还要注意不同平台上的浏览器名称不同:

应用程序名称因平台而异。不要在可重用模块中硬编码它。例如,Chrome 在 macOS 上为 google chrome,在 Linux 上为 google-chrome,在 Windows 上为 chrome


2
高级配置文档的链接已经更改。现在它是https://facebook.github.io/create-react-app/docs/advanced-configuration - Osama Qarem
10
因为我在这上面浪费了很多时间,对于OS X系统:BROWSER="谷歌浏览器"。 - sshevlyagin
1
在 Mac 上,您还可以通过 BROWSER=google chrome canary 将其设置为 Chrome Canary。 - Darren Alfonso
1
对于那些使用Linux的用户,可以像这样设置默认浏览器:BROWSER=google-chrome-stable - n0noob
1
OP被标记为“windows”,这也是我的情况,由于使用PowerShell,建议的解决方案不适用。在我的情况下,.env文件是关键。 - sKopheK
显示剩余6条评论

58

您提到正在使用 create-react-app 创建 React 应用程序,想要在按下 npm start 后打开 Chrome。请在您项目中的 package.json 中以以下方式设置 BROWSER 变量:

替换为:

"start": "react-scripts start"

随着:

  • Linux:
    "start": "BROWSER='google-chrome-stable' react-scripts start"
    
  • Windows:
    "start": "BROWSER='chrome' react-scripts start"
    
    OS X:
    "start": "BROWSER='google chrome' react-scripts start"
    

16
我认为Windows的语法有误。我收到了“'BROWSER'不是内部或外部命令,也不是可运行的程序或批处理文件”的错误提示。 - Ron Inbar
3
也许您需要在 Windows 中指定 chrome 可执行文件的完整路径。 - n0noob
1
启用远程调试后:"start": "BROWSER='google chrome' BROWSER_ARGS='--remote-debugging-port=9222' react-scripts start" - zirkelc
1
这个很好用。谢谢。 - Nunchuk
3
不适用于React 18.0.0,在17.0.1中适用。实际上需要 "react": "^17.0.1", "react-scripts": "4.0.1"。是否有适用于18.0.0的解决方法? - brunshte
Windows的语法取决于它是从命令行还是PowerShell运行,但从未像这里描述的那样正确。对我来说,“start”:“set \”BROWSER=firefox\” && react-scripts start”解决了问题,即使根据此处所述,它不应该在PowerShell中工作。 - cupiqi09

28
在你的NodeJS应用程序根目录使用.env文件的方法。
BROWSER="firefox developer edition"

4
目前在Windows机器上,这对我是不起作用的,但使用BROWSER="firefox"仍会打开Firefox Developer Edition,所以我想我没问题了。 - gkri
4
这是一种相当个人的喜好,所以你可能希望将其添加到 .env.local 文件中(该文件被Git忽略)。 - Rahel Lüthy
简单有效的解决方案,适用于macOS Catalina操作系统。 - 0xFK
在 Big Sur 上,BROWSER=firefox developer edition 对我有效,尽管之前是 BROWSER=Firefox Developer Edition。最好两个都试一下。没有引号也没有完整路径是不起作用的。 - Romain Champourlier

24

使用上述技术时,您可能会遇到错误

'BROWSER'不被识别为内部或外部命令、可操作的程序或批处理文件。

要解决此问题,在您克隆的存储库中执行npm安装cross-env

npm install --save cross-env

尝试在package.json文件中使用以下命令:

"start": "cross-env BROWSER=chrome react-scripts start"

BROWSER是一个环境变量,您可以使用cross-env包来正确处理它。


9
仅需更正一下:最好将"cross-env"安装为dev-dependencies。因此,更好的命令是安装该包:npm install --save-dev cross-env。 - ni8mr
我正在使用 Ubuntu 20.04,以下内容在我的 package.json 文件中可行:"start": "BROWSER=chromium node scripts/start.js", - Edgar Manukyan
@EdgarManukyan 没有奇怪的地方,但 OP 被标记为“windows” - sKopheK
这是在运行 VS Code 的 Windows 上,对我有效的唯一解决方案。 - kenswdev
1
安装过程没问题,但是这里仍然打开了Microsoft Edge.... :( - Marcelo Luz

6

只需全局添加env-cmd软件包

然后创建一个.env文件,并写入具有特定浏览器路径的变量,之后将env-cmd添加到启动脚本中

在终端中操作

npm install -g env-cmd

在 .env 文件中

BROWSER= "your browser path"

将 "like" 翻译成 BROWSER= "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft Edge"

在 package.json 中添加 env-cmd

"scripts": {
   "start": "env-cmd react-scripts start",
   "build": "react-scripts build",
   "test": "react-scripts test",
   "eject": "react-scripts eject"
}

那应该可以工作!


6

我不喜欢反复创建新的.env文件或每次都要用额外的命令在npm start前添加。您可以在shell配置文件中指定您选择的浏览器而不是none。在终端中输入以下命令:

echo export BROWSER=none >> ~/.bashrc
source ~/.bashrc

此时你可以运行npm start命令并愉快地使用了。


这正是我所想的。每次创建React项目时都必须添加此变量的要求是不合理的。最坏的情况下,它应该是npm start中的一个开关。 - Ken Ingram

5
在Windows cmd中,设置所需浏览器的环境变量: set BROWSER=chrome 然后像平常一样运行 npm start

你打错字了,你写成了“BROWSWER”,我改成了“BROWSER”。 - Grim

3
如果你想在运行npm startyarn start命令时更改默认浏览器,最简单的方法是编辑你的package.json文件。 许多人不习惯使用终端来处理环境变量。以下是你的scripts部分应该看起来像的内容:
"scripts": {
"start": "BROWSER=none react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},

在上述情况下,将不会打开任何浏览器,你可以自由选择你的开发浏览器并继续工作(我更喜欢这种方式)。但是,如果你想要一个特定的浏览器,那么你可以将BROWSER=none替换为以下任何一个:

  • BROWSER=firefox
  • BROWSER=google-chrome-stable
  • BROWSER=vivaldi

随你便。


太棒了!我讨厌脚本每次自动打开Chrome。我更喜欢自己打开它,或者使用Visual Studio Code的launch.json来打开Chrome。 - Chris Livdahl
如果没有打开浏览器,我该如何查看结果,即如何使用我喜欢的浏览器运行它? - Mahmoud Mabrok
你知道你的应用程序在哪个端口运行!只需在您选择的浏览器上输入以下内容: http://localhost:<PORT_NUMBER> 即可访问。 - Debojyoti Chatterjee

3

如果更改默认浏览器设置无效,则在Windows中打开Visual Studio Code,并将脚本浏览器更改为:

"start": "BROWSER=chrome react-scripts start"

我一直在尝试更改package.json文件的设置,直到我意识到这个简单的解决方案。 - Abdulhakim

2
对于勇敢浏览器,它是BROWSER=brave-browser npm start

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接