这篇文章将会学习如何在Django中以最小的代价安装Webpack。这个问题常规的解决办法是使用django-webpack-loader,但是在我看来这种方式代价太大。这篇文章的目的是提供一个在Django中安装设置Webpack的手册,只使用Webpack和Django的功能而不使用任何插件。

Django-webpack-loader

django-webpack-loader 看起来是在Django项目中安装Webpack的事实上的解决办法。我尝试使用它但是这个方法的效果并不好:

  1. 它需要一个非标准的manifest插件(这看起来也很奇怪)。

  2. 它提供了一组定制Django模板的工具,而不是使用Django优秀的内置static功能。

  3. 为了使用这些定制工具,需要在Django中做一堆配置。

它是一个很不方便的解决方案,既需要Webpack插件也需要Django插件。

免责声明:尽管我在这里批评了Django-webpack-loader,这并不意味着我否认它的作者在这项工作中付出的艰苦的努力。

普通 Django和Webpack

在Django中使用Webpack实际上相当简单,并不需要任何Webpack或者Django插件。

Django原生支持处理静态资源。在开发过程中,Django可以提供静态资源,并且在生产部署过程中,Django可以压缩文件和对文件名进行哈希。Webpack也可以做这些(甚至更多),但最方便的是让Webpack只负责生成资源,让Django只负责处理资源。

在实践中,像这样做:

 1. 使用Django默认的对静态资源的支持

从Django文档中可以看到,重要的设置如下:

  • STATICFILES_DIRS

  • STATIC_URL

  • STATICFILES_STORAGE - 使用 ManifestStaticFilesStorage 让Django通过对文件名哈希来实现缓存.

  2. 配置Webpack写入文件到STATICFILES_DIRS变量的目录

你可以使用任何你想使用的Webpack配置项。不过只有一部分重要的配置项:

1. 通过STATICFILES_DIRS变量配置Webpack写入文件的目录

2. 配置output.publicPath变量与Django的STATIC_URL匹配

     3. 不让Webpack哈希文件名(除了文件块,参考下文)

4. 确保webpack-dev-server写入文件到磁盘(这样Django可以在部署时提供服务)

现在,在开发过程中你需要同时运行webpack-dev-server和Django服务器。你可以使用程序文件和一个类似Goreman的工具来方便地完成这件事而不需要打开两个终端。Webpack写文件到STATICFILES_DIRS变量指向的目录,Django使用这些文件提供服务。最棒的是:你仍然能够获得Webback的优势,像热加载和动态导入。

你可以使用Django的static标签来包含Webpack生成的资源:

对于生成部署,你首先需要用Webpack构建资源,然后像通常那样使用manage.py collectstatic命令。太方便快捷了!只有简单的Django和Webpack,优雅又简单。

Webpack 文件块(动态导入)

像我们前面提到的那样,使用Webpack哈希块文件名。Webpack运行过程中默认使用块编号来指向块文件。当Django运行collectstatic时,它对文件名进行哈希,然后找到没有哈希的引用进行替换。

例如,如果你在一个样式表中引用指向了foo.jpg文件,然后Django将foo.jpg重名为foo.695e1b313f34.jpg,它将会自动把样式表中引用的文件名从foo.jpg修改为foo.695e1b313f34.jpg。

在运行时,Webpack默认通过块文件的编号chunk id引用它们,因此collectstatic命令不会正确地识别块文件名。通过使用Webpack哈希块文件名,我们得到了被恰当哈希的块文件名,因此这些文件可以被浏览器恰当的缓存。

示例项目

对上面内容,我已经在Github上创建了一个演示项目,因此你可以看看实际效果如何。这个项目也可从Heroku获取。

如果上面的内容对你是有用的,我很想听到你的反馈!

英文原文:https://pascalw.me/blog/2020/04/19/webpack-django.html 译者:穆胜亮

openmvide使用需要什么插件_在Django中使用Webpack:再也不需要插件了!相关推荐

  1. python 邮箱验证_在Django中进行用户注册和邮箱验证的方法

    本文主要介绍我在利用Django写文章时,采用的注册方法.首先说一下整体逻辑思路: •处理用户注册数据, •产生token,生成验证URL, •发送验证邮件, •用户登录网址,进行验证, •验证处理. ...

  2. axure谷歌浏览器插件_都说谷歌浏览器好用,网页翻译插件插件必不可少

    Infinity新标签页插件是一款可以把chrome默认新标签页换成一个美观实用的infinity新标签页,不仅有简洁美观的页面,自定义添加网站,还有邮件提醒,天气预报,笔记功能,待办事项,右下角小风 ...

  3. cad加载tiff影像插件_设计大神CAD常用的七个插件你会用几个?

    说道CAD插件可能会被人们熟知的也就那几个,可是据统计CAD插件多达上百个,那么在这上百个插件中你又会用几个呢?下面就让我们看看大部分设计师常用的插件有哪些吧! 一.cad批量修改图框程序 1.输入加 ...

  4. idea struts插件_使用Struts 2的查询网格(无插件)

    idea struts插件 当将jQuery与struts 2结合使用时,开发人员被说服使用struts2-jQuery插件 . 因为大多数论坛和其他Internet资源都支持jQuery strut ...

  5. mysql8.0 密码认证插件_只需使用VS Code的REST客户端插件即可进行API调用

    为什么要离开IDE去测试新的API?现在你不必这样做了. 我们如何获取数据 如果你已经做了很长时间的Web开发,你可能知道我们的很多工作都是围绕着数据展开的:读取数据.写入数据.操作数据,并以合理的方 ...

  6. 华视读卡器多浏览器插件_翻遍Chrome商店,这9款插件值得安装

    对于电脑浏览器来说,好用的浏览器插件确实方便不少,浏览器插件功能各异,但确实都能满足不少需求. 而现在的浏览器市场,几乎就是Chrome或者基于Chromium内核浏览器的天下,这不微软的Edge向C ...

  7. jqueryui时间插件_满足您所有日历要求的jQueryUI Datepicker插件

    jqueryui时间插件 jQuery provides a variety of Calendar Plugins that would allow you to integrate calenda ...

  8. 安卓游戏广告加速插件_这是一个你值得拥有的安卓小插件.....

    点击上方「稻草人讲万物」关注我们 哈喽大家好,我是稻草人. 今天给你们带来了一个好用又好玩的安卓手机文艺小清新语录插件.有了这个小插件,你可以每天都在手机桌面上看到不一样的文艺语录,每天都是好心情.显 ...

  9. 写笔记插件_梁宝川:这11条anki插件的使用常识分享给你

    每日写一篇文章的第2年195天 anki考研找梁宝川 在我们编辑anki笔记的过程当中,插件我担任着一个非常重要的角色. 因为插件可以帮我们将笔记形式变得更加丰富. 并且,也可以我们更加方便的操作an ...

最新文章

  1. Git使用常见问题解决方法汇总
  2. linux 修改ip地址_Day.19 变更IP地址
  3. accept函数与TCP三次握手
  4. 移动金融业务风控框架及设备风险识别的意义(上)
  5. 前端学习(932):mouseenter和mouseover区别
  6. mysql 日志同步 数据不同步_Mysql互为主从问题--日志同步数据不同步
  7. CentOS 7 Linux实时内核下的epoll性能分析
  8. CentOS7 安装部署k8s
  9. plsql development 注册码
  10. Matplotlib库学习笔记(4) pyplot的文本显示以及Latex的使用
  11. 能煮熟鸡蛋的慢 SQL!阿里巴巴数据中心的“煮蛋史”!
  12. DNS服务(二):域名劫持
  13. 同事在上班期间在干私活,要不要告诉老板!
  14. 某金融企业核心存储POC测试及选型经验
  15. BUGKU (Take the maze)
  16. 短短一年时间,为何液晶面板价格大涨七成?
  17. 玩《Minecraft我的世界》学python编程,可免费领|取电子学习版本
  18. java程序员从笨鸟到菜鸟_Java程序员从笨鸟到菜鸟之(十四)Html基础积累总结(上)...
  19. 手机访问电脑本地项目
  20. WmiPrvSE.exe是什么进程?WMI Provider Host占用很高CPU怎么办?

热门文章

  1. java并发AtomicReference
  2. 微服务架构的核心技术问题
  3. centos下安装opencv
  4. C 标准库 - string.h之strstr使用
  5. python使用工具简介介绍
  6. EntityFramework包含作用
  7. Linux加固(转)
  8. (译)C#/.NET中的委托与事件
  9. 如何让一个div里面的div垂直居中?
  10. RabbitMQ学习之Flow Control