Webpack 5已经到来

早在今年(2019年)的2月份,Webpack核心团队的Sean Larkin就做过一次关于webpack 5新特性的演讲,为大家讲述了webpack 5目前的开发进展,还有webpack 5会有哪些新特性。

现在,我们已经可以安装最新的webpack 5了,不过v5还不是正式版本。目前npm官网上的最新版本仍然是v4

为了体验v5版本,你需要使用下面的命令

yarn add webpack@next webpack-cli --devnpm install webpack@next webpack-cli --save-dev

webpack 5有哪些值得期待

本次major版本的修改主要参照下面的四个主要方向:

  1. 利用持久缓存来提高构建性能
  2. 优化算法和默认值来改善长期缓存
  3. 重构了内部代码,而不引入重大变更
  4. 为了未来可能的功能,引入一些重大的变更,以便可以让团队长时间停留在v5版本

持久缓存(Persistent Caching)

先简单地概述一下webpack的工作原理:webpack读取入口文件(entry),然后递归查找所依赖的模块(module),构建成一个“依赖图”,然后根据配置中的加载器(loader)和打包策略来对模块进行编译。

但是如果中间有文件发生变化了,上面所述的整个递归遍历流程会重新再进行一次。

大致流程如下:

webpack 5利用持久缓存优化了整个流程,当检测到某个文件变化时,依照“依赖图”,只对修改过的文件进行编译,从而大幅提高了编译速度。

经过测试,16000模块的单页应用,速度可以提高98%

数据来自Sean Larkin的《The Road to Webpack 5》

命名IDs

在v5版本中,开发模式将默认开启全新的命名chunk id算法,编译后的chunk名称可读性大大加强。

模块ID(Module ID)由其相对于上下文的路径而确定,代码块ID(Chunk ID)由其内容来决定。

此外,在v5版本中还通过新的算法来帮助长期缓存(long-term caching)。在生产环境中,可以使用下面的配置来启用新算法:

chunkIds: "deterministic”,
moduleIds: “deterministic"

新算法会以确定的方式为模块(module)和代码块(chunk)分配一个非常短(3或4个字符)的数字ID。所以,今后再生产环境中,如果你修改了vendor bundle中的一个依赖,那些并没有发生变化的模块ID也不会改变,所以仍然可以被浏览器缓存,提高资源加载的性能。

NodeJS的polyfill脚本被移除

最开始,webpack的目标是允许在浏览器中运行大多数的Node模块,但是现在模块格局已经发生了重大变化,现在有很多模块是专门为前端开发的。在v4及以前的版本中,对于大多数的Node模块将自动添加polyfill脚本(腻子脚本)。

然而,这些大量繁杂的脚本都会添加到最终编译的代码中(bundle),但其实通常情况下是没有必要的。在v5版本中将尝试停止自动地添加polyfill脚本,转而专注于前端兼容模块。

在迁移到v5版本时,最好尽可能使用前端兼容模块,如果一定要用到核心模块的话,请为其添加polyfill(webpack会通过错误提示来指导帮助开发者)。

废弃了一些特性

那些在v4中已经被抛弃但是仍然可以被使用的特性,将再v5中彻底被废弃。

所以在迁移到v5时,请留意那些在v4中抛出“弃用警告”(deprecation warnings)的提示。

除此之外,还有一些东西也被移除了,但是在v4中没有抛出弃用警告,例如IgnorePlugin和BannerPlugin,现在必须传递一个options对象。

引入了更多新东西

webpack 5 要求node的最低版本为 Node 8。不再是之前的Node 6。

另外,webpack 5还引入了webAssembly、Hashing、多线程、还有workers。

总结

今年的前端小伙伴们要学习的东西还真多,Flutter、Vue 3.0、现在又来了Webpack 5。真是“学无止境”~~

https://www.zhihu.com/video/1138159146842095616

参考文章:

  • New Features in Webpack 5
  • The Road to Webpack 5
  • Changelog-v5

编译期会出现错误提示有哪些_Webpack 5有哪些值得期待相关推荐

  1. JAVA编译时出现的错误提示

    1.错误:非法字符 看到这个错误提示,我们首先要考虑是否使用了中文字符 2.错误:找不到符号 看到这个错误,我们要考虑单词有没有拼写错误. 3.编译不报错,但是运行时出现错误 这种属于业务逻辑错误.环 ...

  2. tensorrt之tensorrtx编译:遇到的错误提示

    一.tensorrtx 编译步骤: mkdir build cd build cmake .. make // /workspace/tensorrt_release/include# cp -r N ...

  3. 【新手】关于路径格式的问题(错误提示incomplete universal character name)

    #include <stdio.h> int main() {system("E:\Pictures\csdn.jpg");system("pause&quo ...

  4. 编译mysql4.0时候出现错误提示checking LinuxThreads... Not found

    编译mysql4.0时候出现错误提示checking "LinuxThreads"... "Not found" 2009-06-30 18:25 解压mysq ...

  5. 编译后错误提示为pls-00103:出现符号在需要下列之一时:begin case declare

    create or replace trigger auth_secure before insert or update or delete --/对整表更新前触发 on g002 begin IF ...

  6. .iOS APP Project or Mac APP Project编译错误提示: My Mac 64-bit is not valid for Running the scheme...

    1. iOS APP Project or  Mac APP Project编译错误提示: "The run destination My Mac 64-bit is not valid f ...

  7. Android Studio 4.2Previw版本编译错误提示Disable offline mode and rerun the build

    编译出现的问题 项目在Android Studio 4.2Previw版本编译错误提示Disable offline mode and rerun the build No cached versio ...

  8. Myeclipse中项目没有代码错误提示,jsp页面无编译迹象?如何解决

    在使用Myeclipse开发项目时,发现jsp页面中嵌入的java代码没有编译的迹象,错误的get方法没有报错,没有报错信息我们如何知道我们开发的内容是正确的呢? 接下来就演示一下如何解决

  9. Java注解 编译_Java注解(3)-注解处理器(编译期|RetentionPolicy.SOURCE)

    注解的处理除了可以在运行时通过反射机制处理外,还可以在编译期进行处理.在编译期处理注解时,会处理到不再产生新的源文件为止,之后再对所有源文件进行编译. Java5中提供了apt工具来进行编译期的注解处 ...

最新文章

  1. NeHe教程Qt实现——lesson14
  2. JSOI2010 联通数
  3. 【机器学习】信用卡欺诈检测|用启发式搜索优化XGBoost超参数
  4. 云服务器有什么好 能让云大佬们竞争如此激烈
  5. 深入解析jQuery中的延时对象的概念
  6. centos6.8安装docker,kong-dashboard并实现页面访问
  7. 惩罚女人的最有效方法!
  8. Spring Boot-使用JDBC连接并检索数据库(Mysql在Docker中)
  9. MySQL深度剖析之Buffer Pool专题(2021)
  10. 智能会议系统(5)---SipDemo
  11. 十六进制转换成字符串——CRC
  12. 项目启动会ppt_项目经理实战篇-项目启动会
  13. Windows API ——GetLogicalDriveStrings——获取逻辑驱动器
  14. 利用Caffe训练模型(solver、deploy、train_val)+python使用已训练模型
  15. ElasticSearch6.0.1 拼音搜索,并且高亮显示结果 —6.X版本
  16. java中POJO、PO、BO、VO、DTO和DAO的概念
  17. 数字贸易标准体系框架
  18. RecyclerView 实现横向滚动效果
  19. 盘点2014:10个词让你看懂今年的移动互联网
  20. 从高级语言实现ads 通信_4000通讯ADS通讯-高级语言-资源下载-读根文库

热门文章

  1. 7-1 查找整数 (10 分)
  2. Linux学习之CentOS6下Mysql数据库的安装与配置
  3. JAVA利用JXL导出/生成 EXCEL1
  4. php随笔10-thinkphp 3.1.3 模板继承 布局
  5. Windows Phone 7 处理休眠和墓碑的恢复
  6. 将视图状态存入数据库(3)
  7. ObjectDataSource控件的使用...
  8. java基础编程思想题目2
  9. 【学员管理系统】0x01 班级信息管理功能
  10. iOS 评论APP撰写评论