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

mal*_*uri 88 javascript networking web-development-server node.js webpack

有一些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);
  };
}
Run Code Online (Sandbox Code Playgroud)

我使用以下命令执行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
Run Code Online (Sandbox Code Playgroud)

我可以http://localhost:8080在我的本地计算机上使用dev服务器,但我也想从我的手机,平板电脑访问我的服务器(它们在同一个Wi-Fi网络中).

我该如何启用它?谢谢!

for*_*sto 162

(如果你像我一样在Mac和网络上.)

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

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

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

  • 对我而言,它也有效,但我得到一个空白页面.当我浏览选项卡时,我可以滚动并拥有网站标题.你可能知道如何解决这个问题吗? (4认同)
  • 也适用于 Ubuntu 17.10。如果没有安装`ifconfig`,可以通过`ip addr show`找到IP地址 (2认同)
  • 如果你想避免编辑你的 webpack 配置,你可以传递 devServer 参数,如下所示:`npm run dev -- --host=0.0.0.0` (2认同)

Igo*_*sow 47

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

devServer: {
    host: '0.0.0.0',//your ip address
    port: 8080,
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

Wit*_*ult 14

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

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

./ngrok http 8080
Run Code Online (Sandbox Code Playgroud)

这里有ngrok输出

好消息ngrok是,它提供了一个更安全的https版暴露网址,您可以将其提供给世界上任何其他人来测试或展示您的工作.

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

如果您只是想打开您的网站来检查移动响应,那么您应该选择browersync.


sne*_*eas 13

我在寻找满足以下要求的解决方案时发现了该线程:

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

网页包 4

devServer: {
  host: '0.0.0.0',
  useLocalIp: true,
}
Run Code Online (Sandbox Code Playgroud)

网页包5

devServer: {
  host: 'local-ip',
}
Run Code Online (Sandbox Code Playgroud)


And*_*ets 6

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

new webpackDev(webpack(config), {
    public: require('os').hostname().toLowerCase() + ':3000'
    ...
})
Run Code Online (Sandbox Code Playgroud)

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

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

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

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


Bli*_*itz 5

我无法发表评论以向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",
    ...
  },

Run Code Online (Sandbox Code Playgroud)

  • 不幸的是这对我不起作用。我使用的是 Windows 10,无法使用手机访问我的开发 Web 应用程序。移动浏览器只是给我一个超时错误。当我在同一台 Windows 10 笔记本电脑上启动 Web 应用程序,但通过 Tomcat 提供服务时,我可以通过键入 Windows 笔记本电脑的 IP 地址和端口号来访问该本地 Web 应用程序。我真的不知道为什么这是可能的,但我无法打开在 webpack devserver 上运行的本地 web 应用程序。有谁知道我还可以尝试什么来让我的手机访问本地网络应用程序? (2认同)

Cri*_*_SO 5

使用webpack-dev-serverv4.0.0+ 你需要

devServer: {
  host: '0.0.0.0',
  port: 8030,
  allowedHosts: ['all'] // or use 'auto' for slight more security
}
Run Code Online (Sandbox Code Playgroud)