package-lock.json与shadow.cljs.build-report跟踪依赖变更的差异对比
除了你提到的浏览器端可读性优势之外,两者在依赖追踪、覆盖范围和用途上还有这些关键区别:
依赖覆盖范围不同
package-lock.json仅负责锁定项目中的npm生态依赖;而shadow-cljs build-report会同时包含两部分依赖:一是npm依赖,二是Clojure/ClojureScript生态的Maven依赖(比如re-frame、reagent、甚至shadow-cljs自身的核心依赖),这对Clojure栈项目来说是核心差异——毕竟你的项目同时依赖JS和Clojure两类生态。与构建过程的关联度不同
build-report是基于你执行的app构建目标实际生成的依赖树,展示的是最终被打包进产物的依赖(包含shadow-cljs tree shaking后的结果);而package-lock.json是npm层面的完整依赖快照,不管某个依赖是否被项目实际使用、是否被tree shaking移除,都会被记录在内。版本解析与生效逻辑不同
shadow-cljs的依赖解析会结合Clojure生态的依赖协调规则(比如和lein/deps.edn的依赖版本对齐),build-report里的版本是实际参与构建的生效版本;而package-lock.json完全遵循npm的版本锁定逻辑,仅记录npm包的安装版本,无法反映shadow-cljs对依赖的调整或协调结果。变更追踪的直观性与维度不同
- 用
git diff对比package-lock.json时,只能看到JSON字段的版本、哈希变化,很难快速定位到依赖的层级变更或影响范围;而build-report的HTML报告如果纳入版本控制,虽然diff的是HTML内容,但可以通过报告里的依赖树结构、体积占比等信息,直观看到哪些依赖新增、移除或版本变更,甚至能关联到打包体积的变化。 - build-report还会提供额外的构建维度信息:比如每个依赖的打包体积、是否被tree shaking标记为未使用,这些是package-lock.json完全没有的,对优化打包体积、排查性能问题很有帮助。
- 用
核心用途定位不同
package-lock.json的核心是保证npm依赖的可复现安装,解决的是"不同环境安装相同版本依赖"的问题;而shadow-cljs build-report的核心是可视化构建过程中的依赖状态,解决的是"理解哪些依赖实际参与了构建、它们的关系和影响"的问题。
内容的提问来源于stack exchange,提问作者Pedro Delfino

