方式一:从 npm 安装(已发布)
npm i tinyimage -g方式二:从 tarball 安装(内网分发)
将 .tgz 文件发给同事后:
npm i tinyimage-<version>.tgz -g安装完成后运行:
tiny install-service按提示设置快捷键(默认 ⌘⇧M,留空跳过),完成后在 Finder 选中图片或文件夹,按快捷键即可压缩。
npm run package:npm # 生成 tinyimage-<version>.tgz,发给同事即可TinyImage 支持多种图片格式的压缩,提供三种使用方式:
- VS Code 插件:在资源管理器中右键图片/文件夹即可压缩
- npm 命令行:全局安装后使用
tiny进入交互式菜单,或tiny compress <路径>直接压缩 - macOS Finder 快速操作:运行安装脚本后,在 Finder 中右键图片/文件夹即可压缩
| 格式 | 压缩方式 | 说明 |
|---|---|---|
| PNG | TinyPNG 接口(云端) | 无需 API Key,最大 5MB |
| JPG / JPEG | MozJPEG(本地) | 自适应质量,最大 5MB |
| SVG | SVGO(本地) | 多轮优化,移除冗余节点 |
在 VS Code 扩展市场搜索 TinyImage(publisher: linkhopes)安装。
- 压缩单张/多张图片:在资源管理器中右键一张或多张图片 → 选择 「TinyImage: 压缩图片」
- 压缩文件夹内图片:右键目标文件夹 → 选择 「TinyImage: 压缩文件夹内图片」
压缩进度在通知栏显示,详细日志在输出面板的 TinyImage 通道中查看。
在 VS Code 设置中搜索 tinyimage,可配置:
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
tinyimage.minSize |
number | 10 | 最小压缩文件大小(KB),小于此值的文件跳过 |
tinyimage.retain |
boolean | false | 为 true 时保留原文件,压缩结果另存为 .tiny 后缀 |
tinyimage.deep |
boolean | true | 压缩文件夹时是否递归处理子目录 |
npm i tinyimage -g交互式菜单模式
tiny进入交互式菜单,可选:
- 压缩文件夹:递归压缩该目录下所有符合条件的图片
- 压缩单张图片:输入图片路径进行压缩
- 查看当前配置 / 修改当前配置
直接压缩模式
tiny compress /path/to/folder # 直接压缩文件夹(递归)
tiny compress /path/to/image.png # 直接压缩单张图片跳过交互菜单,压缩完成后自动退出。适合脚本调用或 macOS 快速操作等场景。
| 配置项 | 说明 |
|---|---|
basePath |
基路径。设置后输入的路径将相对于该基路径解析;留空则按当前工作目录解析 |
minSize |
最小文件大小(KB),小于此大小的图片跳过 |
retain |
为 true 时保留原文件,压缩结果另存为 .tiny 后缀 |
在 Finder 中右键选中图片或文件夹,通过「快速操作」菜单一键压缩,无需打开终端。
已全局安装 CLI:
npm i tinyimage -g
# 或本地开发时
npm linkchmod +x install-macos-service.sh
./install-macos-service.sh安装过程中会提示配置键盘快捷键(默认 ⌘⇧M,留空可跳过):
请输入快捷键(@=⌘ ^=⌃ ~=⌥ $=⇧,默认 @$m 即 ⌘⇧M,留空跳过):
脚本会在 ~/Library/Services/ 下生成 TinyImage压缩.workflow 并刷新服务缓存。
方式一:右键菜单
在 Finder 中选中一张或多张图片(或包含图片的文件夹)→ 右键 → 快速操作 → TinyImage压缩。
方式二:键盘快捷键
在 Finder 中选中文件后,按 ⌘⇧M(或安装时自定义的快捷键)直接触发。
触发后会弹出 Terminal 窗口,实时显示每张图片的压缩进度、压缩比及大小变化,全部完成后按回车关闭窗口。
如果「快速操作」子菜单中没有出现「TinyImage压缩」,前往: 系统设置 → 隐私与安全性 → 扩展 → Finder,勾选「TinyImage压缩」。
如果快捷键不响应,前往: 系统设置 → 键盘 → 键盘快捷键 → 服务,手动确认勾选「TinyImage压缩」。
rm -rf ~/Library/Services/TinyImage压缩.workflow- Node.js >= 14(推荐使用项目内置的 Volta 版本
node@24) - npm
npm install├── index.ts # CLI 入口
├── extension.ts # VS Code 插件入口
├── config.json # 默认配置
├── src/
│ ├── core.ts # 核心逻辑(过滤、压缩调度、诊断)
│ ├── compressors/
│ │ ├── types.ts # ICompressor 接口
│ │ ├── registry.ts # CompressorRegistry(格式 → 压缩器映射)
│ │ ├── tinypng.ts # PNG 压缩器(TinyPNG 云端 API)
│ │ ├── mozjpeg.ts # JPEG 压缩器(sharp + MozJPEG)
│ │ ├── svgo.ts # SVG 压缩器(svgo)
│ │ └── index.ts # 默认 Registry 及统一导出
│ └── vendor.d.ts # 第三方模块类型声明
└── dist/ # 编译产物(git 忽略)
npm run build # 一次性编译
npm run watch # 监听模式,修改后自动重编译- 在
src/compressors/下新建<format>.ts,实现ICompressor接口:
import { ICompressor, CompressorOutput } from './types';
export class WebPCompressor implements ICompressor {
readonly name = 'webp';
readonly supportedExtensions = ['webp'];
async compress(inputBuffer: Buffer): Promise<CompressorOutput> {
// ...
}
}- 在
src/compressors/index.ts中注册:
import { WebPCompressor } from './webp';
export const defaultRegistry = new CompressorRegistry()
// ...
.register(new WebPCompressor());- 在
config.json的exts数组中加入新格式,并更新package.json里菜单的when条件。
项目内置了两个 VS Code 调试配置(.vscode/launch.json):
- 用 VS Code 打开本项目
- 按
F5或在「运行和调试」面板选择 Run Extension - 会启动一个新的 Extension Development Host 窗口,在其中右键图片即可触发断点
- 在「运行和调试」面板选择 Launch Program
- 会先执行
npm run build,再以 Node.js 调试模式运行dist/index.js - 在源码中打断点,sourcemap 已开启,可直接在
.ts文件中调试
开发时可以通过 npm link 将本地包链接为全局命令,直接在终端用 tiny 测试:
npm link
tiny为什么需要 prepare 脚本?
npm link 会在全局 bin 目录创建指向本地 dist/index.js 的软链接。但如果此时 dist/ 还不存在或内容陈旧,tiny 命令就会报错或运行旧代码。
package.json 中配置了:
"prepare": "npm run build"prepare 是 npm 的生命周期钩子,在执行 npm link 之前会自动触发,确保链接前代码已编译完毕。无需手动先跑 npm run build,避免"改了代码但 tiny 还是旧版本"的问题。
同理,
npm install和npm publish前也会自动执行prepare,保证发布和安装时始终附带最新构建产物。
npm run package:vscode生成 tinyimage-<version>.vsix,可通过 VS Code「从 VSIX 安装」本地安装,或上传到扩展市场。
npm run package:npm生成 tinyimage-<version>.tgz,可本地 npm install <tgz> 测试,或发布到 npm。
确保已安装并登录 @vscode/vsce:
npm install -g @vscode/vsce
vsce login <publisher> # 首次需要 Personal Access Token
npm run package:vscode # 生成 .vsix
vsce publish # 直接发布到市场或在 Visual Studio Marketplace 管理后台 手动上传 .vsix。
npm login # 首次需要登录
npm version patch # 升级版本号(patch / minor / major)
npm run package:npm
npm publishISC