Diffine
库
把比较引擎和左右对照的视图做进同一个 React 包。先按行把两个版本对上,再在改动过的行里对到词,绘制时把两边保持在同一高度,比较和对齐都不必自己写。
关于这个项目
Diffine 找出两个版本之间改了什么,并把结果画到屏幕上。比较与视图是同一个包,而不是在差异库上面再架一个查看器,两半相接的地方是一个值:diffText 把两边对上,返回行、块和计数,是一个普通对象,里面既没有 React 也没有 DOM。视图只是这个值的一个使用者,而不是通往它的唯一路径,所以同一份比较结果可以打印到终端,也可以交给别处。
对齐在一次遍历里分两层完成。先把行两两配对,再在被改动而非被替换的一对里,标出真正移动过的词或字。知道这一行不一样,和看清是哪个词让它不一样,是两回事。视图把结果画在保持同高的两块面板上,中间的空隙用连线接起来;行号、折行、对齐、连线、合并为一栏的排布,视图的每一部分都是带默认值的属性。不用鼠标也读得下来:两块面板都是能获得焦点的区域,在改动之间来回跳的按钮都有名字,改了什么会在变化时读出来。
安装就是一个包加一行 CSS。底下没有差异库,没有编辑器组件,也没有 CSS 框架:运行时依赖列表是空的,react 和 react-dom 是同级依赖,用的是应用里已有的那份。样式表不会在它所绘制的元素之外声明任何东西,放在导入顺序的哪个位置都无所谓;深色配色跟随系统设置,应用想自己决定时则由一个属性决定。包是 ESM,带 TypeScript 类型声明,引擎另有自己的入口,只需要比较结果的应用不会把视图一并拉进来。
功能
文档站点
TypeScript 类型
多语言支持
经测试验证
内置无障碍支持
深色模式
支持摇树优化
零依赖
