【问题标题】:Clojurescript dead-code elimination apparently not workingClojurescript 死代码消除显然不起作用
【发布时间】:2020-02-04 20:31:37
【问题描述】:

我有一个带有以下准系统前端应用程序的 ClojureScript 项目(main 是入口点):

(ns shadowman.app
  (:require
   ;; [cljs-http.client :as http]
   ;; [reagent.core :as r]
   ))

(defn main 
  ""
  []

  (js/console.log "hi from browser"))

这编译为预期的 95,2 kB。一旦我取消注释 [cljs-http.client :as http] 总跳转到 299,7 kB;包括reagent 进一步提高到 457,4 kB。 由于我没有从这些命名空间调用任何函数,Google Closure 编译器不应该将它们作为死代码消除吗?

我的 shadow-cljs.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 得到上面的数字。除非我对消除死代码的期望有什么误解,否则这张图片有问题。如果是这样,我将不胜感激有关如何调查它的任何想法。

【问题讨论】:

    标签: clojurescript google-closure-compiler dead-code shadow-cljs


    【解决方案1】:

    您可以生成build report 以了解您的最终构建包含哪些内容。

    shadow-cljs 和 Closure 编译器不会对构建所需的 npm 依赖项执行 DCE。一旦包含它们,就只完成基本的 DCE(即:simple),这不能完全消除代码。这样做是因为:advanced 破坏了太多的 npm 依赖项。所以在reagent的情况下,它最终会默认包含reactreact-dom,即使reagent是也不会被消除。

    然而,这不仅限于 npm 依赖项。并非所有 CLJS 代码甚至 Closure Library 代码都可以完全消除。一些代码模式只是阻止 DCE 启动。一个示例是任何无法删除的 defmulti/defmethod

    【讨论】:

    • 非常感谢!至少现在我知道什么可以做,什么不能做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多