写点什么

pika 开源:替代 WebPack 的全新 JS 构建工具

  • 2019-04-02
  • 本文字数:1883 字

    阅读完需:约 6 分钟

pika开源:替代WebPack的全新JS构建工具

在过去几年中,JavaScript 打包已经从一种生产环境优化手段演变成几乎所有 Web App 都必不可少的构建步骤。不管你喜欢与否,打包器已经给 Web 开发带来了巨大的复杂性,这是个不争的事实。

为什么要进行打包?

现在的 JavaScript 打包概念可以追溯到很早以前(大约 6 年前),那个时候我们通常会对 JavaScript 文件进行最小化处理,或者把很多 JavaScript 文件串成一个单独的文件,这样可以加快网页的加载速度,并解决 HTTP/1.1 的并行请求瓶颈问题。


那么,为什么这个优化手段会成为开发必不可少的步骤?说到这里,我们不得不提到 npm。那个时候,npm 正在成为最大的代码库注册中心,前端开发者都十分依赖它。唯一的问题时,如果不进行打包,Node 的模块系统就无法运行在 Web 上。于是,Browserify、Webpack 之类的现代 Web 打包器出现了。

复杂性综合征

现如今,如果不使用像 Webpack 这样的打包器,构建 Web App 几乎是不可能的。你可以使用 create-react-app 创建一个项目,但它会在 node_modules 目录下安装 200 多 MB 的文件,其中包含了 1300 多个不同的依赖项,而你可能只是为了运行“Hello World!”。


其实,想要自己开发一个 JavaScript 模块系统并不难,而且一些 npm 包也可以在没有依赖项的情况下直接在 Web 上运行。但可惜的是,大部分包仍然无法直接运行,可能是因为 npm 包的遗留依赖项或 npm 包的导入机制所导致的。


于是,@pika/web 出现了。


GitHub 链接:https://github.com/pikapkg/web

没有打包器的 Web App

@pika/web 通过一种新的方式来安装 npm 依赖项,可以让它们在浏览器中运行,即使它们也有自己的依赖项。它实际上并不是一个构建工具,也不是一个打包器,而是一个依赖项安装工具,可以让你减少对其他工具的依赖,甚至完全可以让 Webpack 或 Parcel 直接退役了。


npm install && npx @pika/web✔ @pika/web installed web-native dependencies. [0.41s]
复制代码


@pika/web 会检查 package.json 的 manifest,看看有没有导出模块的依赖项,然在在本地 web_modules 目录中安装这些依赖项。


安装好的包可以在浏览器中运行,因为 @pika/web 把每个包都打包到一个单独的.js 文件中。例如,整个 preact 包被安装成 web_modules/preact.js。


或许你会说:“它只不过是把打包隐藏了起来,在另一个地方进行打包!”


实际上,@pika/web 确实是在内部利用了打包来输出 Web 原生的 npm 依赖项。


@pika/web 将打包器的复杂性封装在了一个单独的安装工具中,你不想配置打包器就可以不配置。当然,你也可以继续使用你喜欢的工具:你可以继续使用 Babel、TypeScript 来增加开发经验,或者使用 Webpack、Rollup 来优化生产代码。

性能

相比其他打包器,@pika/web 的依赖项安装方式(单个 JS 文件)在性能方面具有更大的优势:依赖项缓存。如果使用其他打包器把依赖项打包成一个大型的 vendor.js,那么在更新其中一个依赖项时,用户需要重新下载整个包。而 @pika/web 则不同,更新其中一个依赖项并不会影响缓存中的其他依赖项。


@pika/web 旨在解决打包器存在的问题,比如重复代码、冗余代码导致的首次页面加载速度变慢、升级 Webpack 生态系统导致的 bug……


另一方面,不进行打包也不是件好事。大文件比小文件的压缩率更高,而且即使 HTTP/2 可以同时加载多个小文件,但浏览器在发出后续请求时仍然要解析它们。


所以,我们必须在性能、缓存效率和复杂性之间做出权衡,而这就是 @pika/web 存在的意义。

@pika/web 使用策略

@pika/web 已经彻底改变了我们的 Web 开发方式。以下是我们使用 @pika/web 开发 pikapkg.com 的流程,我们也希望你们在 2019 年开发新的 Web App 时也可以使用这个流程。


对于新项目,可以抛弃打包器了。使用 JavaScript 模块语法来写项目代码,使用 @pika/web 来安装 npm 依赖项,不需要其他工具。


根据需要来添加其他工具。如果你需要类型系统,就加入 TypeScript。如果你想要使用实验性的 JavaScript 特性,可以加入 Babel。如果你想最小化 JavaScript 代码,可以加入 Terser。


如果你觉得有必要,并且有时间,可以试着加入一个打包器,然后进行性能测试。页面首次加载变快了吗?如果是,那就发布出去!


随着项目的增长,持续优化你的打包器配置。


如果你的项目有足够的预算,可以招一个 Webpack 专家。

示例项目

  • 一个简单的项目:


https://glitch.com/edit/#!/pika-web-example-simple


  • 一个 Preact+HTM 项目:


https://glitch.com/edit/#!/pika-web-example-preact-htm


  • 一个 Electron 项目,使用了 Three.js:


https://github.com/br3tt/electron-three


  • 英文原文:


https://www.pikapkg.com/blog/pika-web-a-future-without-webpack


更多内容,请关注前端之巅。



2019-04-02 08:0016319
用户头像

发布了 731 篇内容, 共 483.2 次阅读, 收获喜欢 2008 次。

关注

评论 2 条评论

发布
用户头像
兄弟那么6,来我们公司吧,在泰国,月薪大几万,v我,TH0631280401
2019-04-07 16:22
回复
去泰国面向枪口编程吗😃
2019-10-14 17:34
回复
没有更多了
发现更多内容

订阅GPT4之前必须了解的十件事情-【新手向】ChatGPT入门指南

蓉蓉

openai ChatGPT GPT-4

看你能解锁哪些新身份?OpenHarmony大使、MVP、金码达人在线申报

OpenHarmony开发者

阿里云 SelectDB 联合 DTS ,一键实现 TP 数据实时入仓

SelectDB

大数据 阿里云 云数据库 数据迁移 #数据库

使用Python爬取豆瓣电影影评:从数据收集到情感分析

霍格沃兹测试开发学社

CloudIDE就是未来编程的新风向

是但求其发

产品 编程语言 研发效能 企业动态 云端开发

从 Linux 内核角度探秘 JDK MappedByteBuffer

bin的技术小屋

jdk RocketMQ JVM Linux内核 java nio

国产搜索引擎崛起:Elasticsearch 国产化加速

极限实验室

elasticsearch 国产化 国产化替代 easysearch

ProtoBuf-gRPC实践

杨充

海外社交营销为什么用云手机?不用普通手机?

Ogcloud

云手机 海外云手机 云手机海外版 国外云手机 跨境云手机

Python如何接收键盘按键

霍格沃兹测试开发学社

架构实战营 - 模块三作业

满心

架构实战营

直播预约丨《袋鼠云大数据实操指南》No.1:从理论到实践,离线开发全流程解析

袋鼠云数栈

大数据 离线开发 离线开发离线计算 数据实操

GTC 2024 开幕,英伟达发布新一代 GPU 架构;Apple ID 或将淘汰丨 RTE 开发者日报 Vol.168

RTE开发者社区

场景化感知智能,重构企业数字化综合能力

脑极体

AI

Github每日热榜2024.03.19(Github Trending Daily)

天马行空的大杂烩

GitHub 程序员 开源软件

Java深入理解LinkedList

小白牙

Java List 链表

万界星空科技MES系统在智能生产中的重要作用

万界星空科技

工业互联网 制造业 智能制造 mes 万界星空科技

助力客户效益增长近10倍!即构宝藏算法是如何做到的?

ZEGO即构

人工智能 AI 算法 直播技术 虚拟背景

平凯星辰入选 2023 北京市数字经济标杆企业

编程猫

深入探究Dubbo SPI的原理与强大

小白牙

Java dubbo 后端 spi

em5 SPECPU2006测试说明

源芯

开源 芯片 模拟器

云手机为企业出海提供多元化解决方案

Ogcloud

云手机 海外云手机 云手机海外版 国外云手机 跨境云手机

PHP 服务实现监控可观测性最佳实践

观测云

php

pika开源:替代WebPack的全新JS构建工具_大前端_Fred K Schott_InfoQ精选文章