QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

Webpack 4.0 发布,带来配置简化、WebAssembly 支持和性能提升

  • 2018-03-19
  • 本文字数:1465 字

    阅读完需:约 5 分钟

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

2 月 25 日,目前最流行的 JavaScript 模块打包器—— Webpack 发布了其 4.0 版本。该版本包括了一个完全重新的插件系统,将 WebAssembly 支持提升到头等模块类型,简化了配置选项等特性。此次更新同时带来了巨大的性能提升,有报告称可以降低 60% 到 98% 的构建时间。

4.0 版本中包含的一个重要改进是简化了依赖的配置文件。竞争对手模块打包器 parcel.js 宣传的其中一个主要特性就是不需要配置。此次版本发布后,Webpack 引入了一个基于模式的最小化配置,默认情况下可以不使用任何配置文件。Prosper Otemuyiwa 在 Auth0 博客上发表了一篇文章来阐述其这项特性的意义:

在此之前为了能够让 Webpack 打包应用,必须在 webpack.config.js 文件中定义一个入口。然而在 Webpack 4 中,没有必要再去定义入口,它会默认使用./src/index.js 文件。

此外,也没有必要再定义生成的文件,Webpack 会将打包后文件生成到 /.dist/main.js。

这项看似华而不实的功能,对于小项目而言非常有意义,无需配置文件,只需 webpack!

此次发布同时包含了一个完全重写的插件系统,主要是处于性能的原因。Webpack 的核心开发人员 Tobias Koppers 曾在一篇介绍新系统的文章中解释过动机:

插件系统是 Webpack 的核心组件,这意味着插件钩子的调用频率非常高,许多钩子函数都是调用热点。

但是当前版本的插件系统使用非常通用的实现方式:使用 arguments 来表示任何数量的参数,然后循环获取以兼容各种参数数量的插件。对于每个钩子函数均如此,这使得调用插件方式有多种形态,难以优化。

新系统带来了更加明晰切便于优化的 API,以提高性能、便于调优,同时能够更加方便的和强类型系统(如 Typescript 和 Flow)进行整合。

4.0 版本在发布前持续了公测了 1 个月,以便于让插件开发者能够更新插件,但不是所有插件都已经更新。开发者可以参照插件移植指南对插件和加载器进行更新。另外,如果开发者使用了流行的 HTMLWebpackPlugin 插件,应该参照发布博客获取打过补丁的版本。由于该插件的核心维护者已经离开,Webpack 团队临时提供了一个兼容版本。

本次发布带来了另外一个重大提升是支持了多个头等模块类型,包括对 WebAssembly 的实验性支持。Webpack 对 WebAssembly 的支持从 2017 年 7 月就已经开始,当时 Webpack 团队获得了 Mozilla 开源支持计划(Mozilla Open Source Support ,MOSS)的资助。在关于此次自助的公告中,Webpack 团队的 Sean Larkin 制定了目标:

更进一步,我们希望用户可以在工程中添加任何 Rust、C++、C 文件,然后像使用 JavaScript 模块那样使用它们。

此次发布之后,这个目标已经开始实现。现在我们可以通过 npm 安装 Rust 加载器 C++ 加载器,这已经支持了目标语言中的⅔。

归功于大幅度的性能提升,那些对新特性不感兴趣的开发者可能也会希望升级到 Webpack 4.0。在一个非正式的twitter 调查中,twitter 用户Evan Scott报告了构建时间有74% 的提升,从36801ms 降低到了9632ms;而twitter 用户Arkaitz Garro报告了有65% 的提升,构建时间从42730ms 降低到了15179ms。

Webpack 4.0 的完整更新日志可以在发布说明上查看。需要注意的是此次发布将Webpack CLI 拆分到了独立的webpack-cli 包中,因此如果在构建系统之外使用,需要额外安装新的包。希望尝试Webpack 4.0 的开发者可以通过npm i webpack webpack-cli --save-dev 命令安装。

查看英文原文 Webpack 4.0 Release Brings Simplified Configuration, WebAssembly Support, and Big Performance Boost

2018-03-19 19:002564

评论

发布
暂无评论
发现更多内容

ModStartCMS Laravel9 v3.6.0内容标签增强,电脑手机适配

ModStart开源

Android技术分享| 安卓3行代码,实现整套音视频通话功能

anyRTC开发者

android 音视频 移动开发 实时通讯 视频通话

自动搭建Maven私有仓库,不限容量、免费用

阿里云云效

maven 阿里云 云原生 Maven仓库 制品仓库

天翼云CDN最佳实践

天翼云开发者社区

CDN

jackson学习之一:基本信息

程序员欣宸

4月月更

解析天翼云IPsec VPN和SSL VPN的区别

天翼云开发者社区

vpn

项目经理值得一试的思维方式:项目成功方程式

禅道项目管理

项目管理 软件开发

在 Kubernetes 中使用 Keycloak OIDC Provider 对用户进行身份验证

Se7en

社交CRM系统解决方案

低代码小观

CRM 企业管理系统 社交软件 CRM系统 客户关系管理系统

实例带你掌握如何分解条件表达式

华为云开发者联盟

代码 函数 条件表达式 条件分支 条件逻辑

Masa Blazor in Blazor Day

MASA技术团队

C# .net 微软

「技术人生」专栏作者来直播间啦!欢迎来提问

阿里巴巴中间件

阿里云 云原生 中间件 技术人生 一号位

推出全新分布式计算接口!OneFlow v0.7.0发布,LiBai代码库、Serving、MLIR一应俱全

OneFlow

人工智能 机器学习 深度学习 深度学习框架 深度学习编译器

TASKCTL调度服务平台节点管理

敏捷调度TASKCTL

数据仓库 kettle 元数据 ETL任务 任务调度

三高Mysql - Mysql索引和查询优化(偏实战部分)

懒时小窝

MySQL

Go 1.18 新特性:多模块工作区模式

华为云开发者联盟

Go 指令 go 1.18 多模块工作区 工作区

蒙牛“申”请出战 全力守“沪”战疫

科技新消息

java培训-程序员怎样靠技术来延长职业周期

@零度

JAVA开发

eBPF Cilium实战(1) - 基于团队的网络隔离

北京好雨科技有限公司

Kubernetes PaaS rainbond

快来一起玩转LiteOS组件:Curl

华为云开发者联盟

LiteOS 文件传输 curl LiteOS组件 嵌入式设备

一文解读GPU服务器!

Finovy Cloud

人工智能 GPU服务器 GPU算力

郑曌:从 ACM 世界冠军到技术 VP 的制胜之道

第四范式开发者社区

人工智能 数据库 编程 程序员 ACM

使用APICloud AVM框架封装app日历组件

YonBuilder低代码开发平台

前端开发 APP开发 APICloud 多端开发 avm.js

谈谈Java8-18引入的新特性

CRMEB

如何利用MHA+ProxySQL实现读写分离和负载均衡

华为云开发者联盟

MySQL 读写分离 高可用架构 ProxySQL MHA

DapuStor大普微电子加入PolarDB开源数据库社区

阿里云数据库开源

数据库 阿里云 开源数据库 polarDB

“逆行者”蒙牛 穿越疫情“暴风眼”

科技新消息

OpenHarmony 3.1 Beta版本关键特性解析——ArkUI开发框架canvas组件绘制实践

OpenHarmony开发者

canvas OpenHarmony ArKUI 3.0

巧用天翼云盘备份云主机数据

天翼云开发者社区

云主机 云存储

守“沪”第一线 蒙牛使命必达

科技新消息

到底为什么你我都要了解社会工程学

图灵教育

黑客 社会工程 社会科学

Webpack 4.0 发布,带来配置简化、WebAssembly支持和性能提升_JavaScript_Kevin Ball_InfoQ精选文章