在LAN上查看Django和webpack构建的站点

时间:2015-12-30 07:26:07

标签: python django webpack lan webpack-dev-server

我正在尝试在其他设备上查看我本地提供的网站,例如我的手机或其他笔记本电脑。在我目前的笔记本电脑上,网站运行正常,我看到了所有内容(前端),当我访问该网站时,我得到200秒。

然而,当我尝试使用我的iphone和第二台笔记本电脑访问该网站时,我没有看到任何前端,但是当我尝试访问该网站时,我确实获得了200秒。我的工作机器上的终端也告诉我有进入的请求。

我使用Django作为后端,并使用webpack捆绑/构建我的Javascript和CSS,并将其与webpack-dev-server一起提供。

当我运行webpack时,我看到了这样的消息:

http://0.0.0.0:3000/
webpack result is served from http://localhost:3000/public/bundle/
content is served from ./public

当我在工作机器上加载网页时,开发人员工具会显示:

enter image description here

一切正常。

我用这个命令运行django。

$ ./manage.py runserver 0.0.0.0:8000

我的ifconfig给了我:

inet 192.168.1.102

使用我的第二台笔记本电脑,我访问192.168.1.102:8000,我的页面上看不到任何内容。我的机器上有一个200,网站工作意味着请求已经完成。在我的第二台笔记本电脑上,我在开发人员工具中看到了这一点:

enter image description here

请注意/public/src

中没有href

在我的第二台机器上,如果我访问192.168.1.102:3000我看到一个界面,我可以点击192.168.1.102:3000/bundle/main.js并查看我的webpack内置的javascript。

在我的第二台机器上,我尝试将开发人员工具中的src和href更改为192.168.1.102:3000/bundle/main.js。但是没有什么会改变,我仍然看到一个空白的屏幕

这是我的webpack配置的gist

https://gist.github.com/liondancer/7685b53dffa50d7d102d

1 个答案:

答案 0 :(得分:4)

我相信你的页面是空的,因为整个“app”是由javascript生成的(至少在你的两个截图中看起来如此,假设<div id="app"></div>的内容不是由django视图生成的)但是与您的开发计算机不同的客户端无法访问javascript文件。

如果没有settings.pyurls.py以及生成主页的view的代码/模板,很难猜到为什么会发生这种情况,但我们有一些候选人可能会生成此主页问题:CORS,localhost“中毒”,最终导致STATIC_URL配置错误。

  1. CORS:如果任何方案,请求被视为跨域, 主机名或端口不匹配。您从localhost:8000(或192.168.1.102:8000)和localhost:3000请求文件。因此,如果您从外部设备/笔记本电脑请求文件,CORS问题将会增加;
  2. localhost是同一台机器 在你的“工作电脑”上作为192.168.1.102,但它不在你的第二个 笔记本电脑或网络中的任何其他设备;
  3. 您是否使用{% url %}{% static %}代码生成css和js文件的网址?似乎没有,但它们看起来仍然是动态生成的(即URL中缺少的“公共/”部分)。我不知道使用vanilla Django和相同的设置获得不同路径的方法,所以你应该提供你的视图的源代码,至少,以获得准确的答案。
  4. 解决方案(或者,至少提示:-)):

    1. 从同一端口投放捆绑包(将其添加到您的STATIC path
    2. 替换html网址中的每个localhost引用(可能需要更改sites - 请参阅sites framework
    3. 使用标准模板标记/过滤器,避免在模板和代码中使用硬编码的URL。
    4. 或安装https://github.com/owais/django-webpack-loader/pip install django-webpack-loader)并按照自述文件或http://owaislone.org/blog/webpack-plus-reactjs-and-django/指南