我已经尽力进行了搜索,但是我找不到一种简单的方法来启用“现货” 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.269gatsby --version
):1.1.57昨天我们在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-app
和Meteor
,但是-正如她所说-这是设计决定。
我尝试创建一个空的Gatsby默认启动器,这是我的发现:
gatsby develop -H $HOSTNAME -p 8000
gatsby develop -H 192.168.1.105 -p 8000
gatsby develop -H 0.0.0.0 -p 8000
您能检查一下是否遇到同样的情况吗?
感谢您的详细回复,@ ryanditjia。
我在这里:
gatsby develop -H $HOSTNAME -p 8000
和gatsby 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
@ryanditjia提出的硬编码解决方案( gatsby develop --host 192.168.0.18 --port 8000
)对我来说非常有效,因为我可以在具有HMR的其他设备上访问它。
有一个警告(我完全可以忍受):我无法通过计算机上的localhost:8000
访问它。 相反,我必须使用192.168.0.18:8000
或My-Mac.local:8000
。
我注意到的一个更大的问题是,当我连接到网络时,我并不总是拥有相同的本地IP,这意味着我必须不断更改package.json
的硬编码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
我可以在网络上获得一小段带有信息的文本。inet 192.168.0.18
。awk
并使用RegEx查找inet 192.168.x.y
(其中x
和y
可以用任何从0到999的数字)并打印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? 您认为它会起作用吗?
最有用的评论
您也可以使用
gatsby develop -H 0.0.0.0