日常开发中经常需要在终端里快速生成一个二维码——比如分享本地测试地址给同事、把一段配置文本编码成二维码供手机扫描。今天我们用 OpenCode,不写一行代码,4 分钟做一个命令行二维码生成器。
技术栈:Node.js + qrcode + commander,约 90 行代码。支持终端 ASCII 显示和 PNG 文件输出两种模式。
最终效果:
$ node qr.mjs "https://opencode.ai" --terminal █████████████████████████████████████ █████████████████████████████████████ ████ ▄▄▄▄▄ █ ▀ ▄█▀▄▀▀ ▄▀ ▄▄▄▄▄ ████ ████ █ █ █▀▀█▄▄█ █ ▄█▀▀ █ █ ████ ████ █▄▄▄█ █▀ █▄ ▀█▀▀█▄█ █▄▄▄█ ████ ████▄▄▄▄▄▄▄█ █▄▀ █▄▀ █ █▄█▄▄▄▄▄▄▄████ ████▄▀▄▄▄ ▀ ▀▄▀▄ █ █ ▀▄▄▄▀▀█▄█▀▄████ ██████▄▀▀▀▀▀█ ▄ ▄▄▀▀█▄▀ ▄█ ██▄ █████ ████▄▄▀▄▀▀▀▀▀█▀▄▄▀▄▀▀ ▀▀▀▀ ▄█▀▀▀█████ █████ ▀ ▄▄▄▀▀ ▀▄▄▀▀ ▀ ▀ █▄▄▀ ▀▄████ ████ ▄ █▄▄ ██▀▄▄▀▄ █ ▀█ ▄▀▀█▄█ █████ ████▄ ▄▄ █▄ ▄█▀██▄ ▀ ▄▀▄██▀█▀▀▀▄▀████ ████▄██▄▄██▄█▀▀█▀▀▄▄▄▀ ▀▄█ ▄█▀▄ █████ █████ ▄▄▄▄▄▄█ ▀▀█ ██ █▀▀ █▄█▄█▄▀ ████ █████▀ ▀▀█▄██▄▄█▀▄▀█ ▀▀▀ ▄▀ ▀▀▄▀████ ████▀▀▄▄▀▀▀▀█▀▀█▀▀▀▀▄▄▄▄ ▀▀▀▀█▀ ▄████ ████▄█▄▄▀ ▄▀ ▀▄███ ▀ ▀ ▄▀▄▀█▀▀▄████ ████▄█ █ ▄▀▀ ▀▀ ▄██ ▀▀▀ ▄█ ▄████ ████▄ ▀█▄▄ ▄ ▀▄ ▀█▀▀▀█▀ ▀ ▀▀▄█▀▄████ ████▄▄█▀▄▄▄▄▄▄▀█▄ █ █▀▀▀█ ▀▀█ ▀▀▄████ ████▄▄ ▀▄▀▄█▄█ ▀▀▀█▄▄▀▀▄█▄ ▄▀▄▄▀▄████ ████ ▄▄▄▄▄ █▀█▀██▀▀▄█ ▄ ▀ █▄█ ███ ████ ████ █ █ █▀█▀ █▀▀█▄▄▄▄▄██▄▄ ▄█ ████ ████ █▄▄▄█ █▀ ▄▄██ ▀█ █▄▄█▀ ▀██ ████ ████▄▄▄▄▄▄▄█▄█▄█▄█▄█████▄█▄▄▄▄██▄████ █████████████████████████████████████ █████████████████████████████████████
我对 OpenCode 说:
> 在当前目录创建一个 Node.js 项目,用 ESM 模块模式。我要写一个命令行二维码生成工具。package.json 里设置 "type": "module"。
OpenCode 立即创建了 package.json,并自动识别出需要用到的 npm 包。它问我是否要安装 qrcode 和 commander,我回复确认。不到 30 秒,项目骨架就搭好了。
关键要点:告诉 OpenCode 你的运行环境(ESM / CommonJS),它能自动调整配置,省去手动翻文档的时间。
我对 OpenCode 说:
> 创建一个 qr.mjs 文件,实现以下功能:
> 1. 使用 commander 解析命令行参数
> 2. 接收一个必选参数:要编码的文本
> 3. 支持 -t, --terminal 选项,在终端用 ASCII 显示二维码
> 4. 支持 -o, --output <file> 选项,输出为 PNG 文件
> 5. 支持 -s, --size <number> 选项,设置图片尺寸,默认 256
OpenCode 生成了完整的 CLI 框架代码,包括参数解析、选项校验逻辑。它还细心地添加了"至少指定 terminal 或 output 之一"的互斥检查,这一点我都没提到。
关键要点:用自然语言描述"做什么"而非"怎么写",把边界条件一起说出来,OpenCode 会自动补全你遗漏的细节。
我对 OpenCode 说:
> 用 qrcode 包的 toString 方法实现终端输出,用 toFile 方法实现 PNG 输出。终端模式下默认使用 small 尺寸,PNG 模式下使用 --size 参数指定的尺寸。
OpenCode 补充了 QRCode.toString() 和 QRCode.toFile() 的调用,并在终端输出前打印了编码内容和提示信息。生成的代码简洁清晰,没有任何冗余。
关键要点:如果你知道要用哪个库的哪个 API,直接告诉 OpenCode,它能更精准地生成代码。不知道也没关系——说"帮我生成二维码并输出到终端",它会自动搜索合适的方案。
我对 OpenCode 说:
> 运行测试一下,生成 opencode.ai 的终端二维码,再输出一张 PNG 图片验证。如果有不符合预期的地方请调整。
OpenCode 自动执行了测试命令,生成的二维码扫描后正确跳转到 opencode.ai。它还在终端二维码上方加了一行分隔线和提示文字,让输出更美观。
关键要点:把 OpenCode 当成结对编程的同事,告诉它"测试一下""不符合预期就改",它会自动迭代。
#!/usr/bin/env node
import { program } from 'commander';
import QRCode from 'qrcode';
program
.name('qr')
.description('命令行二维码生成器')
.argument('<text>', '要编码的文本或 URL')
.option('-t, --terminal', '在终端中显示二维码')
.option('-o, --output <file>', '输出为 PNG 文件')
.option('-s, --size <number>', 'PNG 图片尺寸(像素)', '256')
.parse();
const options = program.opts();
const text = program.args[0];
if (!text) {
console.error('错误:请提供要编码的文本');
process.exit(1);
}
if (!options.terminal && !options.output) {
console.error('错误:请指定 --terminal 或 --output 选项');
process.exit(1);
}
async function main() {
if (options.terminal) {
console.log(`\n📱 编码内容: ${text}\n`);
const ascii = await QRCode.toString(text, {
type: 'terminal',
small: true,
});
console.log(ascii);
console.log('✅ 扫描上方二维码即可查看内容\n');
}
if (options.output) {
const size = parseInt(options.size, 10);
if (isNaN(size) || size < 64 || size > 4096) {
console.error('错误:尺寸必须在 64-4096 之间');
process.exit(1);
}
await QRCode.toFile(options.output, text, {
width: size,
margin: 2,
color: { dark: '#000000', light: '#ffffff' },
});
console.log(`✅ 二维码已保存到: ${options.output} (${size}x${size})`);
}
}
main().catch((err) => {
console.error('生成失败:', err.message);
process.exit(1);
});
// package.json
{
"name": "qr-cli",
"version": "1.0.0",
"type": "module",
"dependencies": {
"commander": "^12.0.0",
"qrcode": "^1.5.0"
}
}
安装与使用:
npm install node qr.mjs "https://github.com" --terminal node qr.mjs "Hello OpenCode" -o hello.png -s 512
这个二维码生成器从零到跑通,全程没有手写一行代码。整个过程就是:
描述需求 → OpenCode 搭项目骨架
指定 API → OpenCode 生成实现代码
运行测试 → OpenCode 自动验证并修复
传统开发流程里,光是翻 qrcode 和 commander 的 npm 文档、处理 ES Module 配置就要花掉十几分钟。而用 OpenCode,你只需要把注意力放在"我想实现什么"上,"怎么写"交给 AI。
这种体验就像有一个即问即答的高级工程师坐在旁边——你说需求,它写代码,你说"跑一下",它帮你测试。对于原型验证、小工具开发、日常脚本编写,效率提升非常明显。