【问题标题】:How to get access to webpack-dev-server from devices in local network?如何从本地网络中的设备访问 webpack-dev-server?
【发布时间】:2016-05-26 12:38:27
【问题描述】:

有一些 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 地址呢?
  • 服务器运行所在机器的IP。
  • 我只能让它与 webpack-dev-server --host=0.0.0.0 --disable-host-check --useLocalIp 一起工作,请参阅 github.com/webpack/webpack-dev-server/issues/882

标签: javascript node.js networking webpack web-development-server


【解决方案1】:

(如果您使用的是 Mac 和像我一样的网络。)

使用--host 0.0.0.0 运行 webpack-dev-server — 这让服务器可以侦听来自网络的请求,而不仅仅是 localhost。

在网络上查找您的计算机地址。在终端中,输入ifconfig 并查找en1 部分或类似inet 192.168.1.111 的部分

在同一网络上的移动设备上,访问http://192.168.1.111:8080,享受热重载开发的乐趣。

【讨论】:

  • 对我来说它也可以工作,但我得到一个空白页。当我浏览标签时,我可以滚动并获得网站标题。你可能知道如何解决这个问题?
  • 也适用于 Ubuntu 17.10。如果ifconfig没有安装,IP地址可以通过ip addr show找到
  • 为了使用--host 0.0.0.0 运行开发服务器,我们应该更新一些配置文件还是只运行npm run dev --host 0.0.0.0?因为目前当我在不更改任何内容的情况下运行命令时,它会引发错误。如果我们确实需要更新一些配置文件,你能告诉我们文件名/目录吗?
  • 18 年 12 月仍在为我工作。仅供参考,而不是在终端中查找 IP 地址,我执行以下操作:cmd + [space] > Network Utility,我的 IP 地址是第二项。每次我尝试它似乎都有效。
  • 如果你想避免编辑你的 webpack 配置,你可以像这样传递 devServer 参数:npm run dev -- --host=0.0.0.0
【解决方案2】:

你可以直接在 webpack 配置文件中设置你的 ip 地址:

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

【讨论】:

  • 这对我有用,值为 0.0.0.0 有效。
  • 在windows上它对我有用,我在ipconfig > IPv4 Address写了主机
  • 到目前为止,这是最好的,我敢说,只有答案。为什么没有这样标记?!
  • 如果您还想使用open: true 标志,那么您还可以设置openPage: 'http://localhost:8080',您的浏览器将再次正常启动,而不是尝试自动加载 0.0.0.0:8080 并失败。
  • 它有效,但请注意在其他人可能连接到您的设备的公共场所绑定 0.0.0.0。这可能会导致您的数据被盗。您可能需要为开发服务器安装防火墙,例如:github.com/funbox/webpack-dev-server-firewall
【解决方案3】:

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

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

./ngrok http 8080

ngrok 的好处在于它提供了一个更安全的 https 版本的公开网址,您可以将其提供给世界上任何其他人以测试或展示您的作品。

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

如果你只是想打开你的网站来检查移动响应,你应该去browersync

【讨论】:

    【解决方案4】:

    我无法评论以向 forresto 的答案添加更多信息,但在未来(2019 年),由于 --host 0.0.0.0 本身存在安全漏洞,您需要添加 --public 标志。查看this comment了解更多详情。

    为了避免“回应其他答案”作为答案,这里是 forresto 的建议以及完成这项工作所需的其他详细信息:

    同时添加:

    --host 0.0.0.0

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

    your-host 是主机名(对我来说是 (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 笔记本电脑上启动 Web 应用程序,但通过 tomcat 提供服务时,我可以通过键入 Windows 笔记本电脑的 IP 地址和端口号来访问该本地 Web 应用程序。我真的不知道为什么会这样,但我无法打开在 webpack 开发服务器上运行的本地 web 应用程序。有没有人对我可以尝试让我的手机访问本地 web 应用程序有什么想法?
    【解决方案5】:

    对我来说,最终的帮助是将其添加到 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',
            ...
        ]
        ...
    }
    

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

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

    【讨论】:

      【解决方案6】:

      我在寻找满足以下要求的解决方案时发现了这个帖子:

      • 使用公网IP自动打开URL。例如http://192.168.86.173:8080。因此,它可以直接从浏览器复制并发送到网络中的另一台设备。
      • 本地网络中有开发服务器。

      这是我想出的解决方案:

      devServer: {
        host: '0.0.0.0',
        useLocalIp: true,
      }
      

      【讨论】:

        【解决方案7】:

        如果您尝试了此处其他答案中所述的所有内容,但均未成功...还要确保您的计算机上没有运行防火墙或在其上打开所需的端口。

        【讨论】:

          猜你喜欢
          • 2021-05-14
          • 1970-01-01
          • 1970-01-01
          • 2017-05-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-09
          • 1970-01-01
          相关资源
          最近更新 更多