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

@pika/web提供了一种新的依赖管理方案,使Web应用无需Webpack等打包工具即可运行。该工具通过将npm包转换为浏览器可直接运行的形式,简化了开发流程,同时保持了较好的性能。

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

\n

为什么要进行打包?

\n

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

\n

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

\n

复杂性综合征

\n

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

\n

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

\n

于是,@pika/web出现了。

\n

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

\n

没有打包器的Web App

\n

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

\n
npm install \u0026amp;\u0026amp; npx @pika/web\n✔ @pika/web installed web-native dependencies. [0.41s]\n
\n

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

\n

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

\n

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

\n

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

\n

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

\n

性能

\n

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

\n

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

\n

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

\n

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

\n

@pika/web使用策略

\n

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

\n

对于新项目,可以抛弃打包器了。使用JavaScript模块语法来写项目代码,使用@pika/web来安装npm依赖项,不需要其他工具。
\n根据需要来添加其他工具。如果你需要类型系统,就加入TypeScript。如果你想要使用实验性的JavaScript特性,可以加入Babel。如果你想最小化JavaScript代码,可以加入Terser。
\n如果你觉得有必要,并且有时间,可以试着加入一个打包器,然后进行性能测试。页面首次加载变快了吗?如果是,那就发布出去!
\n随着项目的增长,持续优化你的打包器配置。
\n如果你的项目有足够的预算,可以招一个Webpack专家。

\n
示例项目
\n
  • \n
  • 一个简单的项目:\n
\n

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

\n
  • \n
  • 一个Preact+HTM项目:\n
\n

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

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

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

\n
  • \n
  • 英文原文:\n
\n

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

\n

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

\n

\"\"

\n
概述 随着科技的发展,数字仪表的应用越来越广泛,逐渐替代传统型机械仪表。本应用就是基于ART-Pi开发板,使用RT-Thread系统设计开发的,面向工程机械行业的数字仪表。本应用通过CAN总线采集发动机和控制器参数,将发动机转速、冷却液温度、燃油液位等参数直观的显示出来。 开发环境硬件:ART-Pi+自制扩展板+自制屏幕 RT-Thread版本:4.0.3 开发工具及版本:RT-Thread Studio 1.1.5 RT-Thread使用情况概述程序基于ART-Pi开发板模板工程创建,BSP版本为1.0.1,RT-Thread版本为4.0.3。 程序中使用的组件包括UART设备驱动、CAN设备驱动、I2C设备驱动、PIN设备驱动、ADC设备驱动等,使用touchgfx库和gt9147软件包,其中对touchgfx库文件和gt9147软件包根据硬件资源进行适当修改。硬件方面使用了GPIO、UART、I2C、SDRAM、LCD、FDCAN、ADC等。 硬件框架 硬件结构框图如上图所示,核心板为ART-Pi开发板,板载SPI flash,SDRAM和RGB888接口。RGB888接口与LCD显示屏连接,用于显示数据;LED指示系统运行状态,系统运行后,LED以2Hz频率闪烁;CAN模块通过扩展板与ART-Pi连接,使用TJA1050 CAN收发器,与其它CAN设备进行数据交互;ART-Pi接收CAN模块数据,并传输给LCD,同时根据当前档位,发送转速控制数据,控制发动机转速。(程序中所有CAN数据帧均为模拟ID,与实际ID不同) 软件框架说明系统读取ADC数值,根据ADC数值发送转速控制数据,外部CAN设备接收到转速控制数据后,控制发动机转速,并将转速发出,系统接收外部CAN设备发送转速、水温、油位等数据,与ADC档位一起传输到LCD数据传输模块,LCD数据传输模块将档位、转速、水温、油位数据传输到LCD显示模块,将数据显示到屏幕上。 软件模块说明ADC模块:adc_thread_entry为ADC模块采集进程,间隔100ms采集电位计AD值。 CAN处理模块:CAN处理模块分为接收模块和发送模块。can_rx_thread为CAN接收进程,接收发动机转速、燃油液位和水温数据。can_tx_thread为CAN发送进程,根据ADC模块采集电位计AD值转换成的档位,向外发送控制转速。 LCD数据处理模块:LCD数据处理模块使用信号队列向LCD发送档位、转速、水温、燃油液位数据。LCD数据处理模块作为ART-Pi硬件与LCD显示之间的一个桥梁,将ART-Pi数据传输给touchgfx的model,实现硬件与touchgfx数据交互。 LCD显示模块: Touchgfx使用MVP架构实现和硬件的双向交互。如下图所示,Model提供数据,View负责显示,Presenter负责逻辑的处理。 程序中,在Model模块的Model::tick函数中接收消息队列数据,当当前显示页面为仪表盘页面时,将数据变化传输到Presenter,再将数据发送给View将数据显示处理。 界面进入仪表显示界面后,会将页面更新通知到Model,使Model中的数据更新有效,使页面在进入仪表盘页面时转速、水温、油位等数据及时更新。 演示效果视频: 视频内容说明:视频中左侧为CAN分析仪,主要用于数据对比显示,对比显LCD显示数据和CAN数据差异;右下角为串口转CAN上位机(下称上位机),用于与ART-Pi进行CAN数据交互,模拟CAN控制器。ART-Pi上面背有一个扩展板,使用一个系统运行指示LED,一个电位计和一路CAN。系统启动后,LED开始闪烁。电位计用于调整档位,ART-Pi根据档位发送转速控制帧数据,上位机接收到ART-Pi发送转速后,按设定转速发出转速;同时上位机可以发出水温和油位数据显示到LCD屏幕上。上位机无数据发出后3秒,仪表数据清零,指针复位。 比赛感悟本次比赛是我第一次接触RT-Thread系统,通过近一段时间学习,逐渐掌握了一些RT-Thread系统的工作方式,了解其运行机制。通过RT-Thread Studio进行简单的配置,即可让系统运行起来,减少了很多系统方面的设置,对初学者比较容易上手。 网站的文档中心就是一个学习的宝库,里面涉及内容广泛、详细,并配有详细的示例说明,初学者基本可以只通过文档就可以把单片机基本外设功能实现,对初学者学习能起到很大的作用。社区论坛有大量的开发者在使用中提出的问题,通过问题检索,方便查找自己在学习中遇到的问题,同时官方提供的讨论群非常活跃,回答问题及时,大大的赞。RT-Thread提供了各类最新、最流行的软件包,可以很方便的添加到工程中,对项目快速开发提供了很大的帮助。 最后感谢主办方、承办方、赞助商提供了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flybirding10011

谢谢支持啊999

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值