用JavaScript生成二维码的库不少,哪种最轻量好用

阿乐
阿乐 管理员 黑卡会员
发布于 2026-09-11 23:45 ·2 浏览 ·0 回复

给页面加一个二维码,听起来是很小的需求,真到选库时却容易被 npm 搜索结果带偏:有的包功能齐全但体积惊人,有的轻到只有算法却要自己画图,还有的停更多年却依然排在前列。到底哪种最轻量好用,不能只看“压缩后多少 KB”,还要看依赖、输出方式、维护状态和你的使用场景。

先定义“轻量”和“好用”

轻量不只是 min+gzip 体积小。零依赖、支持 tree-shaking、按需引入、只生成二维码矩阵而不强行绑定 UI,都算轻量。好用则包括:API 直观、支持 canvas/SVG/dataURL、能在浏览器和 Node 跑、有 TypeScript 类型、文档别太劝退。一个库如果只有 3KB,但需要你手动处理纠错、编码和绘制,那对普通项目来说未必“好用”。

常见选手速览

`qrcodejs` 是很多人最早接触的库,`new QRCode(element, options)` 就能用,体积也不大。但它的硬伤是停更多年、全局变量风格、对现代构建不友好,新项目不太建议优先选。

`qrcode-generator` 是经典算法库,零依赖,体积极小,支持多种输出。它的 API 偏底层,需要自己调用 `addData`、`make`,但稳定、兼容性好,适合老项目或想自己控制渲染的场景。

`node-qrcode` 功能非常全,浏览器和 Node 都能用,支持 `toCanvas`、`toDataURL`、`toString` 等。缺点是包体积和依赖都不算小,如果你只是前端画一个二维码,会有点“杀鸡用牛刀”。

`qrcode.react` 是 React 项目里的顺手选择,直接 `<QRCodeSVG value="..." />`。但它依赖 React,不适合通用场景,也不能算最轻量。

`qr-code-styling` 适合做 logo、渐变、圆点、自定义图案的“艺术二维码”,效果很好,但体积也明显更大。它解决的是好看问题,不是轻量问题。

如果只选一个,我推荐 uqr

`uqr` 是 UnJS 生态里的库,零依赖、ESM 友好,体积只有几 KB 级别,能生成 SVG、ANSI、Unicode 等输出。对现代前端和 Node 项目来说,它是我目前最愿意默认选择的二维码库:

import { renderSVG } from 'uqr'

const svg = renderSVG('https://example.com')
document.querySelector('#qr').innerHTML = svg

它的思路很干净:核心负责编码和矩阵,渲染层保持简单。你不需要引入一整套 UI 逻辑,就能拿到清晰的 SVG。如果要在终端里显示二维码,它也能直接输出 ANSI/Unicode,这一点很实用。

当然,`uqr` 不是万能。它没有内置 logo、渐变、圆点样式,想做营销风格二维码,还是得换 `qr-code-styling` 或自己二次渲染。

具体怎么选

如果你是现代前端或 Node 项目,追求轻量、零依赖、SVG 清晰,优先选 `uqr`。如果你维护老项目,需要全局 script 或经典稳定,选 `qrcode-generator`。React 项目直接用 `qrcode.react` 最省事。服务端批量生成、需要多种格式输出,`node-qrcode` 更全面。需要 logo、渐变、自定义样式,就接受 `qr-code-styling` 的体积。

总结

二维码库没有绝对冠军,但“最轻量好用”这个需求下,`uqr` 目前最均衡:小、快、零依赖、现代 API,适合大多数基础生成场景。`qrcode-generator` 是经典备选,`node-qrcode` 和 `qrcode.react` 适合更具体的生态,`qr-code-styling` 则留给需要重样式的人。选库前先问自己:我只要一个能扫的二维码,还是要一个能当海报元素的二维码?答案不同,选择就不同。

本文转载自 阿乐技术社区,原文地址:https://www.leleweb.cn/thread-238.html
转载请注明出处,版权归原作者所有。

全部回复 0

还没有回复,来抢沙发~