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

itjianghu
itjianghu 正式会员正式会员认证极客认证极客
发布于 2026-07-10 23:51 ·83 浏览 ·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 则留给需要重样式的人。选库前先问自己:我只要一个能扫的二维码,还是要一个能当海报元素的二维码?答案不同,选择就不同。

本文转载自 Clara轻量论坛系统,原文地址:https://www.leleweb.cn/thread-238.html
转载请注明出处,版权归原作者所有。

全部回复 0

还没有回复,来抢沙发~