首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >闭幕式死码消除显然不起作用

闭幕式死码消除显然不起作用
EN

Stack Overflow用户
提问于 2020-02-04 20:31:37
回答 1查看 297关注 0票数 1

我有一个ClojureScript项目,它有以下barebone前端应用程序(main是入口点):

代码语言:javascript
复制
(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闭包编译器不应该将它们作为死代码来消除吗?

我的影子cljs.edn的相关部分如下:(仅省略其他三个构建,我可能会提到,它们确实使用了注释掉的库):

代码语言:javascript
复制
 {: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获得上面的数字。除非我弄错了从死代码消除中期望什么,否则这幅画就有问题了。如果是这样的话,我将非常感谢关于如何调查它的任何想法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-05 08:14:47

您可以生成一个建设报告,以了解最终构建包括哪些内容。

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

然而,这并不局限于npm依赖性。并不是所有的CLJS代码,甚至闭包库代码都可以完全消除。有些代码模式只会阻止DCE的出现。一个例子是任何不能被删除的defmulti/defmethod

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60065121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档