Gatsby: 使用Gatsby从本地LAN开发测试站点

创建于 2018-06-08  ·  27评论  ·  资料来源: gatsbyjs/gatsby

概要

我已经尽力进行了搜索,但是我找不到一种简单的方法来启用“现货” Gatsby安装来支持测试站点,该站点在本地服务器上从同一本地网络上的另一台设备运行。

BrowserSync在此方面做得很好。 使用webpack开发服务器,我通常会编辑webpack配置,将localhost更改为IP地址。

在尝试自定义Webpack配置之前,我已经按照建议检查了现有的插件,但无济于事。 我可以打开引擎盖来做到这一点,但是在做之前,我想我会问:

使Gatsby站点能够从同一本地网络上的其他设备(即移动设备)进行本地开发测试的最佳方法(即,普遍同意的方法)是什么?

:point_up:我有一个聪明的建议,使用gatsby develop -H 192.168.1.100 -p 8000上#5733从@ryanditjia,这不工作; 但是, HMR在使用此功能时

预先感谢您的建议!

相关信息

使用gatsby-default-starter

环境(如果相关)

  • 盖茨比版本( npm list gatsby ):1.9.269
  • gatsby-cli版本( gatsby --version ):1.1.57
question or discussion

最有用的评论

您也可以使用gatsby develop -H 0.0.0.0

所有27条评论

昨天我们在Discord聊天中对此进行了讨论,显然仅绑定本地IP是设计决定。 我还认为Gatsby应该像其他构建工具(create-react-app或Meteor)一样工作,并具有可通过网络访问的开发服务器。


聊天详情

_httpteapot_:
gatsby开发版(v1或v2)是否可以绑定端口,以便使用$ MY_COMPUTER_IP:8000从本地网络对其进行访问?
例如create-react-app

_ghardin137_
仅在开发过程中或使用“盖茨比服务”

_httpteapot_
我在开发过程中对该功能感兴趣,但是gatsby development不会打开网络可访问端口
(除非问题是其他问题)

_LekoArts_
使用devip(npm软件包)获取本地IP,然后使用-H $ YOURIP $ -p $ YOURPORT $

_ghardin137_
默认情况下,它监听0.0.0.0
那会是什么
因此它应该可供网络访问

_httpteapot_
嗡嗡声,它应该能正常工作,因为我已经在多个网络上尝试过多次,但从未从网络上的其他设备连接到开发服务器

_ghardin137_
我可以很快地尝试,但是我很确定

_httpteapot_
而且它一直在使用create-react-app和其他工具

_LekoArts_
它也从来没有为我工作。 这就是为什么我使用-H标志

_httpteapot_
我在linux上

_LekoArts_
Windows 10在这里

_ghardin137_
在这里为我赢得10胜利

_httpteapot_
我不熟悉-H标志,应该将其添加到哪个命令?

_LekoArts_
gatsby开发-H%YOURIP $

_ghardin137_
等一下我处于服务模式
发展仅限本地

_httpteapot_
很好,它是可重复的:smiley:
而且-H标志确实有效

_ghardin137_
是的,所以gatsby构建然后gatsby服务起作用了:smiley:

_httpteapot_
但是我的用例是开发模式并在手机上进行测试
我猜那很普遍

_LekoArts_
由于browserSync,是

_ghardin137_
是的

_httpteapot_
我应该在盖茨比仓库上开一个问题吗?

_ghardin137_
我怀疑这可以按预期工作,但是记录该标志将很有用

_httpteapot_
好吧,打开一个功能请求
我发现流星+创建反应应用程序的工作方式更加直观

_ghardin137_
https://github.com/gatsbyjs/gatsby/issues/561

_ [GaiJin] XiaoDie_
@LekoArts Thx -H标志技巧:slight_smile:

_ghardin137_
如果您想放一个公关来更新带有该信息的文档,我确定他们会接受:smiley:

_LekoArts_
https://www.gatsbyjs.org/docs/

_ghardin137_
在那里也完整列出所有选项可能不会有什么坏处:smiley:

_LekoArts_
我曾经为此做过公关
他们不喜欢

_ghardin137_
但是它确实说develop仅在本地主机上
所以这很有意义

您也可以使用gatsby develop -H 0.0.0.0

谢谢,@ mquandalle。

请确保在我们将来的工作/讨论中注意到,使用gatsby develop -H 192.168.1.100 -p 8000 (我正在使用MacOS)方法似乎确实阻止了HMR热刷新工作(至少到目前为止是这样)。

您正在使用什么设备? HMR仍然为我工作。 FWIW我正在使用Mac和iPhone,也许它们之间的通话更好better

再次您好, @ryanditjia :smile:

感谢您的输入。

我正在MacOS上运行服务器,并使用Chrome,Firefox和Safari访问在同一台计算机上提供服务的站点。 我从本地LAN获得的其他设备都是iOS和Android。

确切地说:

我在用纱

我将以下脚本条目作为package.json

"scripts": {
    "build": "gatsby build",
    "dev": "gatsby develop",
    "dev-m": "gatsby develop -H 0.0.0.0 -p 8000",
    "test": "echo \"Error: no test specified\" && exit 1"
  },

运行yarn dev ,我只能使用http://localhost:8000从当前为站点提供服务的计算机上本地访问该站点。 HMR正常工作。

运行yarn dev-m ,可以使用http://192.168.1.10:8000 (服务器的IP)从本地LAN上的其他设备访问该站点,但是HMR不会自动刷新更改。

如果HMR确实在您的设置上起作用,那么我会对您可以在设置上尝试的更多详细信息感兴趣。

坦白地说,我确实同意@mquandalle的观点,即盖茨比应该更像create-react-appMeteor ,但是-正如她所说-这是设计决定。

我尝试创建一个空的Gatsby默认启动器,这是我的发现:

HMR完全正常工作

  • gatsby develop -H $HOSTNAME -p 8000
    这对于使用多台机器的人来说是最好的,因为它的主机名是动态的。
    例如:Name-iMac。 local:8000和Name-MacBook。 本地:8000 (为方便访问,我在移动设备上将这两个地址添加了书签)
  • gatsby develop -H 192.168.1.105 -p 8000
    对IP进行硬编码并不完全美观或灵活。

HMR部分工作

  • gatsby develop -H 0.0.0.0 -p 8000
    服务器的IP是动态的。 就我而言,是192.168.1.105:8000。
    HMR适用于机器(两者均为0.0.0.0:8000和192.168.1.105:8000); 但不适用于网络设备。

您能检查一下是否遇到同样的情况吗?

感谢您的详细回复,@ ryanditjia。

我在这里:

  • gatsby develop -H $HOSTNAME -p 8000gatsby develop -H 192.168.1.105 -p 8000允许通过主机名(分别通过主机名和ip地址)按主机名从运行Gatsby的服务器和本地LAN设备进行访问,但对我而言仍然没有HMR。

当我说HMR无法正常工作时,我正在做一个简单的测试,以更改文件中的文本并将其保存。 在浏览器开发工具控制台中什么也不会发生,也看不到。

如果在进行更改并保存更改后,我CTRL-C从Gatsby服务器中退出,则在浏览器开发工具控制台中会显示以下警告。

Update check failed: Error: Manifest request to http://server.local:8000/5bd5e2fb7d66e8b025f1.hot-update.json timed out. process-update.js:136
    at XMLHttpRequest.request.onreadystatechange (http://server.local:8000/commons.js:34:23)
  • 没有参数的gatsby-develop只允许在运行Gatsby dev服务器的计算机上访问,而不能从本地LAN上的其他设备访问。 由于将更改保存到文件而导致的任何编译后,HMR几乎都会立即更新。

真奇怪。 您是否在干净的盖茨比启动器上尝试过?

确实奇怪,

作为健全性检查,我只是使用gatsby new gatsby-blog https://github.com/gatsbyjs/gatsby-starter-blog进行了全新的下载和安装。 可悲的是,我的结果和以前一样。

只是使用gatsby new gatsby-example-site尝试了同样的事情,但仍然没有自动刷新。

作为记录,我的gatsby客户端版本为1.1.58,但在1.1.52上存在相同的问题

我得到的结果与@ryanditjia完全相同。

gatsby 1.1.58(已测试gatsby-starter-forty
npm 6.3.0
节点8.11.3
Ubuntu 16

问题:HMR仅在使用硬编码IP时有效

@ryanditjia提出的硬编码解决方案( gatsby develop --host 192.168.0.18 --port 8000 )对我来说非常有效,因为我可以在具有HMR的其他设备上访问它。

有一个警告(我完全可以忍受):我无法通过计算机上的localhost:8000访问它。 相反,我必须使用192.168.0.18:8000My-Mac.local:8000

我注意到的一个更大的问题是,当我连接到网络时,我并不总是拥有相同的本地IP,这意味着我必须不断更改package.json的硬编码IP。

解决方案:动态获取IP

我想要一种动态获取本地IP并将其用作--host ,最终我设法破解了使其可行的方式。 从我的package.json

{
  "scripts": {
    "develop": "gatsby develop --host $(ifconfig | awk '/inet 192\\.168\\.[0-9]+\\.[0-9]+/{print $2}') --port 8000",
    // ... other scripts
  },
  // ... other package.json stuff
}

我仅在我的计算机(macOS)上使用Gatsby版本2.0.0-rc.11所以我不知道您是否可以将其复制并粘贴到package.json并使其正常工作。 但这可以帮助其他人制定自己的自定义解决方案。

代码简短说明

  • 使用ifconfig我可以在网络上获得一小段带有信息的文本。
  • 在该blob内有一段带有我的本地IP的文本: inet 192.168.0.18
  • 为了找到该片段,我将整个文本块传送到awk并使用RegEx查找inet 192.168.x.y (其中xy可以用任何从0到999的数字)并打印IP。
  • 然后,该IP在gatsby develop脚本调用中用于--host

直接在命令行上使用它

package.json使用的命令具有两个反斜杠,以解决JS / JSON中反斜杠的转义符功能(更多信息)。 简而言之,如果您想在命令行中尝试此代码,请使用以下命令:

gatsby develop --host $(ifconfig | awk '/inet 192\.168\.[0-9]+\.[0-9]+/{print $2}') --port 8000

如果要在命令行中尝试并根据需要进行更改,请记住在package.json scripts中使用双反斜杠

似乎必须进行某些更改! 有点对我有用的是gatsby develop -H 0.0.0.0但是我的设备上没有HMR。
我尝试了其余的操作,但是在本地计算机或电话上根本无法连接。

编辑:刚想到我在这台计算机上安装了laravel valet,这也许就是为什么这对我不起作用的原因。 我可以使它几乎可以与gatsby develop --host $(hostname)但这只能在本地使用,而不能在我的网络上使用。

$HOSTNAME几乎没有在我的机器上设置。 因此,我需要这一功能,并且它可以在我的本地网络设备上完美运行:

gatsby develop -H $(hostname) -p 8000

现在这是我在package.json设置的默认开发命令,并与yarn develop 。 大!

真好! 那么从另一台设备查看开发站点的推荐方法是什么? 是gatsby develop -H $(hostname) -p 8000还是还有其他方法?

@TylerBarnes您应该能够运行gatsby develop -H 0.0.0.0并在网络上另一台设备上以<IP>:8000打开计算机

太好了,谢谢@sidharthachatterjee!

视窗:
对于cmd
为/ f“ tokens = 4”%i in('route print ^ | find“ 0.0.0.0”')做gatsby开发--host%i
在配置中将“更改为”
对于/ f“ tokens = 4”%i in('route print ^ | find“ 0.0.0.0”')做gatsby开发--host%i

Linux:
gatsby开发--host $(route -n | grep ^ 0.0.0.0 | awk'{print $ 2}')

在macOS上,我相信您还需要启用文件共享( System Preferences -> Sharing )。

另外,可以在您的URL中使用Computer Name字段。 例如,我的计算机名为kyoto ,我可以通过http://kyoto.local:8000远程访问我的开发站点(在同一网络上)。

gatsby develop -H 0.0.0.0现在可以正常工作了,🎉

有人知道如何使用--open选项使它工作吗? 打开http://0.0.0.0:8000/的网址实际上不起作用。 我可以手动转到localhost:8000,但我不想

编辑:从文档

注意:您无法在Windows上访问0.0.0.0:8000(但可以使用localhost:8000或Windows上的“ On Your Network” URL来运行)

似乎没有处理好案件很奇怪

@crhistianramirez不幸的是,这种边缘情况是Windows问题(在一些测试中浮出水面,因此我们在文档中添加了注释)😞

嗨,您好,

如何将gatsby develop -H 0.0.0.0到我的package.json文件中? 我试图将其放在这样的脚本中,但是不起作用:

"scripts": {
  "build": "gatsby build",
  "develop": "gatsby develop -H 0.0.0.0",
  "format": "prettier --write \"**/*.{js,jsx,json,md}\"",
  "start": "npm run develop",
  "serve": "gatsby serve",
  "clean": "gatsby clean",
  "test": "echo \"Write tests! -> https://gatsby.dev/unit-testing\" && exit 1"
}

@iloveip看起来不错。 您确定要使用npm run develop运行它吗? 如果是这样,则gatsby develop -H 0.0.0.0可能由于某种原因无法在您的计算机上运行。

@nikoladev我只是在运行gatsby develop 🙈非常感谢您的帮助!

我有同样的问题,但似乎是浏览器。 我最初使用Firefox,但在Microsoft Edge上似乎工作正常

有没有人试图用Nginx反向代理:8000? 您认为它会起作用吗?

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

timbrandin picture timbrandin  ·  3评论

benstr picture benstr  ·  3评论

theduke picture theduke  ·  3评论

brandonmp picture brandonmp  ·  3评论

dustinhorton picture dustinhorton  ·  3评论