如何从本地网络中的设备访问webpack-dev-server?


111

有一些webpack开发服务器配置(它是整个配置的一部分):

config.devServer = {
  contentBase: './' + (options.publicFolder ? options.publicFolder : 'public'),
  stats: {
    modules: false,
    cached: false,
    colors: true,
    chunk: false
  },
  proxy: [{
    path: /^\/api\/(.*)/,
    target: options.proxyApiTarget,
    rewrite: rewriteUrl('/$1'),
    changeOrigin: true
  }]
};

function rewriteUrl(replacePath) {
  return function (req, opt) {  // gets called with request and proxy object
    var queryIndex = req.url.indexOf('?');
    var query = queryIndex >= 0 ? req.url.substr(queryIndex) : "";
    req.url = req.path.replace(opt.path, replacePath) + query;
    console.log("rewriting ", req.originalUrl, req.url);
  };
}

我使用以下命令执行webpack:

node node_modules/webpack-dev-server/bin/webpack-dev-server.js --host 0.0.0.0 --history-api-fallback --debug --inline --progress --config config/webpack.app.dev.js

我可以使用http://localhost:8080本地计算机访问开发服务器,但我也想通过移动平板电脑(它们位于同一Wi-Fi网络中)访问服务器。

如何启用它?谢谢!


假设主机设置为0.0.0.0,这样似乎应该已经可以工作了。
菲利克斯·克林

@FelixKling,但是我应该在iPhone的Safari中使用哪个IP地址呢?
malcoauri

服务器运行所在机器的IP。
Felix Kling

2
我只能得到它的工作,webpack-dev-server --host=0.0.0.0 --disable-host-check --useLocalIpgithub.com/webpack/webpack-dev-server/issues/882
Nickofthyme

Answers:


199

(如果您使用的是Mac,并且使用的是我的网络)。

使用以下命令运行webpack-dev-server --host 0.0.0.0-这使服务器可以侦听来自网络的请求,而不仅仅是本地主机。

在网络上找到您的计算机的地址。在终端中,键入ifconfig并查找该en1部分或带有类似内容的部分inet 192.168.1.111

在同一网络上的移动设备中,访问http://192.168.1.111:8080并享受热重装开发的幸福。


4
对我来说,它也在工作,但是我得到了空白页。浏览选项卡时,我可以滚动并具有网站标题。您可能有个解决办法吗?
moesphemie

2
也可以在Ubuntu 17.10上使用。如果ifconfig未安装,则可以通过ip addr show
TitanFighter 18/26/18

1
为了用运行服务器--host 0.0.0.0,我们还是应该更新一些配置文件还是可以运行npm run dev --host 0.0.0.0?因为当前,当我运行命令而不更改任何内容时,它将引发错误。如果我们必须更新某些配置文件,您能告诉我们文件名/目录吗?
PrintlnParams

npm run dev --host 0.0.0.0引发错误,该错误指示程序正在寻找“ 0.0.0.0”作为模块名称。当我将项目的index.js文件中的值从“ localhost”更改为“ 0.0.0.0”时,它就起作用了。
瓦西里大厅

1
仍然在18年12月为我工作。仅供参考,而不是在终端中查找IP地址,我执行以下操作:cmd + [space]> Network Utility,我的IP地址是第二项。每次尝试都可以使用。
震中

89

您可以直接在webpack配置文件中设置IP地址:

devServer: {
    host: '0.0.0.0',//your ip address
    port: 8080,
    disableHostCheck: true,
    ...
}

这对我来说很有效,值是0.0.0.0。
瓦西里大厅

2
在Windows上,它可以与wifi一起使用,我在ipconfig > IPv4 Address
URL87

1
我敢说,到目前为止,这是最好的答案。为什么没有将其标记为这样?
卡马尔

如果您还想使用该open: true标志,则还可以进行设置openPage: 'http://localhost:8080',浏览器将再次正常启动,而不是尝试自动加载0.0.0.0:8080并失败。
Mark

它可以工作,但请注意在其他人可能连接到您的设备的公共场所绑定0.0.0.0。这可能会导致您的数据被盗。您可能需要开发服务器的防火墙,如下所示:github.com/funbox/webpack-dev-server-firewall
Igor Adamenko

16

它可能不是完美的解决方案,但我认为您可以为此使用ngrokNgrok可以帮助您将本地Web服务器公开到Internet。您可以将ngrok指向本地开发服务器,然后将您的应用程序配置为使用ngrok URL。

例如,假设您的服务器在端口8080上运行。您可以使用ngrok通过运行将其暴露给外部世界

./ngrok http 8080

ngrok输出在这里

好消息ngrok是,它提供了公开URL 的更安全的https版本,您可以将该URL提供给世界上任何其他人以测试或展示您的作品。

它还在命令中提供了许多自定义功能,例如设置用户友好的主机名,而不是在公开的url中设置随机字符串,还提供了许多其他功能。

如果您只想打开网站来检查移动设备的响应能力,则应该使用browersync


8

对我而言,最终帮助将其添加到webpack-dev-server配置中的是:

new webpackDev(webpack(config), {
    public: require('os').hostname().toLowerCase() + ':3000'
    ...
})

然后还更改babel的webpack.config.js文件:

module.exports = {
    entry: [
        'webpack-dev-server/client?http://' + require('os').hostname().toLowerCase() + ':3000',
        ...
    ]
    ...
}

现在,只需获取您的计算机主机名(hostname在OSX终端上),添加您定义的端口,就可以继续使用移动设备了。

与ngrok.io相比,此解决方案还使您可以在移动设备上使用react的热重载模块。


7

我无法发表评论以向Forresto的答案添加其他信息,但--public由于安全漏洞,--host 0.0.0.0单独使用时,在未来(2019年)您将需要添加标志。查看此评论以获取更多详细信息。

为了避免“响应其他答案”作为答案,这里提供了forresto的建议以及执行此工作所需的其他详细信息:

同时添加:

--host 0.0.0.0

--public <your-host>:<port>

您的主机是主机名(对我来说是(name)s-macbook-pro.local),而port是您要访问的任何端口(同样,对我来说是8081)。

所以这是我的package.json的样子:

  "scripts": {
    ...
    "start:webpack": "node_modules/.bin/webpack-dev-server --host 0.0.0.0 --public <name>s-macbook-pro.local:8081",
    ...
  },

不幸的是,这对我没有用。我在Windows 10上,只是无法用手机访问我的开发Web应用程序。移动浏览器只是给我一个超时错误。当我在同一台Windows 10笔记本电脑上启动网络应用程序,但通过tomcat为其提供服务时,我可以通过键入Windows笔记本电脑的IP地址和端口号来访问该本地Web应用程序。我真的不知道为什么可能这样做,但是我无法打开在webpack开发服务器上运行的本地webapp。是否有人对我还能尝试使手机进行本地Web应用程序访问有任何想法?
&sand83
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.