You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

shadow-cljs添加依赖后是否编译?为何文件数量无变化

问题与解答

问题背景

我按照shadow-cljs快速开始文档搭建了一个最小化项目,初始shadow-cljs.edn配置如下:

;; shadow-cljs configuration
{:source-paths
 ["src/dev"
  "src/main"
  "src/test"]

 :dev-http {8080 "public"}
 :dependencies
 []

 :builds
 {:frontend
  {:target :browser
   :modules {:main {:init-fn acme.frontend.app/init}}
   }}}

项目中/Users/pedro/projects/acme-app/src/main/acme/frontend/app.cljs代码为:

(ns acme.frontend.app)

(defn init []
  (println "Hello World"))

执行编译命令npx shadow-cljs compile frontend后,输出:

$ npx shadow-cljs compile frontend

shadow-cljs - config: /Users/pedro/projects/acme-app/shadow-cljs.edn
shadow-cljs - updating dependencies
shadow-cljs - dependencies updated
[:frontend] Compiling ...
[:frontend] Build completed. (79 files, 0 compiled, 0 warnings, 4.88s)

之后我添加了一系列依赖:

:dependencies [[day8.re-frame/re-frame-10x "1.2.1"]
                [proto-repl "0.3.1"]
                [re-frame "1.2.0"]
                [com.degel/re-frame-firebase "0.9.6-SNAPSHOT"]
                [bidi "2.1.5"]
                [re-com "2.13.2-106-180ea1f-SNAPSHOT-TALLYFOR"]
                [com.andrewmcveigh/cljs-time "0.5.2"]
                [com.pupeno/free-form "0.6.0"]
                [binaryage/dirac "RELEASE"]
                [hickory "0.7.1"]
                [cljs-hash "0.0.2"]
                [medley "1.2.0"]]

但重新编译后,日志中的files、compiled、warnings数值均未改变(仍显示79 files, 0 compiled, 0 warnings),仅耗时略有波动。我并未调用依赖中的函数,想咨询:

  • 添加的依赖是否真的被shadow-cljs编译?
  • 若已编译,为何文件数量保持不变?

解答

  • 添加的依赖没有被编译:shadow-cljs默认启用严格的Tree Shaking(摇树优化)机制,只会将代码中实际被引用、执行的部分打包进最终产物。你没有在项目代码中调用任何依赖的函数或引用其模块,这些依赖的代码完全不会进入编译流程,自然不会被编译。

  • 文件数量不变的原因:编译日志里的79 files指的是shadow-cljs处理的核心基础文件(比如ClojureScript标准库、shadow-cljs自身的辅助代码),并非你的项目代码+所有依赖的文件总和。未被引用的依赖不会被加载到编译队列中,所以这个数字不会变化。

  • 验证依赖是否可正常引入的方法:如果想确认依赖是否能被正确识别,可以在app.cljs中显式引用某个依赖,比如:

(ns acme.frontend.app
  (:require [re-frame.core :as rf]))

(defn init []
  (println "Hello World")
  (rf/dispatch [:test-event]))

重新执行编译命令,就能看到compiled数值增加,files数量也会相应变化,证明依赖已被正确编译。

内容的提问来源于stack exchange,提问作者Pedro Delfino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 06:55:19