У меня есть проект ClojureScript со следующим приложением barebone-интерфейса (main
является точкой входа):
(ns shadowman.app
(:require
;; [cljs-http.client :as http]
;; [reagent.core :as r]
))
(defn main
""
[]
(js/console.log "hi from browser"))
Это компилируется в ожидаемые 95,2 кБ. После того, как я раскомментирую [cljs-http.client :as http]
, общий скачок достигнет 299,7 кБ; в том числе reagent
дополнительно повышает его до 457,4 кБ. Поскольку я не вызываю никаких функций из этих пространств имен, не должен ли компилятор Google Closure исключить их как мертвый код?
Соответствующие части моего shadow-cl js. edn: (опуская только три другие сборки, которые, я мог бы упомянуть, используют закомментированные библиотеки):
{:source-paths [;; "env/prod"
"src/server" "test" "src/browser" "src/common" "src/plibs" "target/classes"]
:dependencies [[reagent "0.9.1"]
[bidi "2.1.6"]
[com.taoensso/timbre "4.10.0"]
;; [org.clojure/clojurescript "1.10.520"]
[macchiato/hiccups "0.4.1"]
[macchiato/core "0.2.16"]
[macchiato/env "0.0.6"]
[mount "0.1.16"]
;; [cljs-ajax "0.8.0"]
[cljs-http "0.1.46"]
[hickory "0.7.1"]
;; [markdown-to-hiccup "0.6.2"]
]
;; :dev-http {3001 "public"}
:builds {
:spa-prod
{
:target :browser
:output-dir "public/js/compiled"
:asset-path "/js/compiled"
:modules {:app-comp {:init-fn shadowman.app/main}}
:compiler-options
{:optimizations :advanced
}}
}}
Я получаю числа выше, выполнив shadow-cljs release spa-prod
. Если я не ошибаюсь по поводу того, что ожидать от устранения мертвого кода, что-то не так с этой картиной. Если это так, я буду благодарен за любые идеи о том, как его исследовать.