From 6e5356d8b9cb56227b43d2b0e1184cea93b62fa7 Mon Sep 17 00:00:00 2001 From: Juho Teperi Date: Tue, 17 Apr 2018 20:24:41 +0300 Subject: [PATCH] Fix and optimize Cljs compiler options - Enable aot-cache for all builds - :source-map true is default, no need to set here - Disable figwheel config validation for now - Move prerender namespace, which uses built-in Node modules, to separate folder to ensure this is not part of other builds. - Use single source-path folder for Cljs to ensure less files are compiled. --- {demo => prerender}/sitetools/prerender.cljs | 0 project.clj | 78 ++++++++++---------- 2 files changed, 41 insertions(+), 37 deletions(-) rename {demo => prerender}/sitetools/prerender.cljs (100%) diff --git a/demo/sitetools/prerender.cljs b/prerender/sitetools/prerender.cljs similarity index 100% rename from demo/sitetools/prerender.cljs rename to prerender/sitetools/prerender.cljs diff --git a/project.clj b/project.clj index d5497ad..3e8eb32 100644 --- a/project.clj +++ b/project.clj @@ -28,23 +28,30 @@ [doo "0.1.10"] [com.google.javascript/closure-compiler-unshaded "v20180319"] [cljsjs/prop-types "15.6.0-0"]] - :source-paths ["demo" "examples/todomvc/src" "examples/simple/src" "examples/geometry/src"] + :source-paths ["demo" "test" "examples/todomvc/src" "examples/simple/src" "examples/geometry/src"] :resource-paths ["site" "target/cljsbuild/client" "target/cljsbuild/client-npm"]}} :clean-targets ^{:protect false} [:target-path :compile-path "out"] :figwheel {:http-server-root "public" ;; assumes "resources" :css-dirs ["site/public/css"] - :repl false} + :repl false + ;; :npm-deps and :stable-names + :validate-config false} - ;; No profiles and merging - just manual configuration for each build type + ;; No profiles and merging - just manual configuration for each build type. + ;; For :optimization :none ClojureScript compiler will compile all + ;; cljs files in source-paths. To ensure unncessary files + ;; aren't compiled it would be better to not provide source-paths or + ;; provide single file but currently this doesn't work for Cljsbuild. + ;; In future :main alone should be enough to find entry file. :cljsbuild {:builds {:client - {:source-paths ["src" "demo" "test"] + {:source-paths ["demo"] + :watch-paths ["src" "demo" "test"] :figwheel true :compiler {:parallel-build true - :source-map true :optimizations :none :main "reagentdemo.dev" :output-dir "target/cljsbuild/client/public/js/out" @@ -53,23 +60,19 @@ :npm-deps false}} :client-npm - {:source-paths ["src" "demo" "test"] + {:source-paths ["demo"] + :watch-paths ["src" "demo" "test"] :figwheel true :compiler {:parallel-build true - :source-map true :optimizations :none :main "reagentdemo.dev" :output-dir "target/cljsbuild/client-npm/public/js/out" :output-to "target/cljsbuild/client-npm/public/js/main.js" - :asset-path "js/out" - ;; add process.env.node_env preload - ; :npm-deps true - :process-shim true}} + :asset-path "js/out"}} :test - {:source-paths ["src" "test"] + {:source-paths ["test"] :compiler {:parallel-build true - :source-map true :optimizations :none :main "reagenttest.runtests" :asset-path "js/out" @@ -79,49 +82,52 @@ :aot-cache true}} :test-npm - {:source-paths ["src" "test"] + {:source-paths ["test"] :compiler {:parallel-build true - :source-map true :optimizations :none :main "reagenttest.runtests" :asset-path "js/out" :output-dir "target/cljsbuild/test-npm/out" :output-to "target/cljsbuild/test-npm/main.js" - ; :npm-deps true - ;; add process.env.node_env preload - :process-shim true :aot-cache true}} + ;; Separate source-path as this namespace uses Node built-in modules which + ;; aren't available for other targets, and would break other builds. :prerender - {:source-paths ["src" "demo"] + {:source-paths ["prerender"] :compiler {:main "sitetools.prerender" :target :nodejs :output-dir "target/cljsbuild/prerender/out" - :output-to "target/cljsbuild/prerender/main.js"}} + :output-to "target/cljsbuild/prerender/main.js" + :aot-cache true}} :node-test - {:source-paths ["src" "test"] + {:source-paths ["test/reagenttest/runtests.cljs"] + :watch-paths ["src" "test"] :compiler {:main "reagenttest.runtests" :target :nodejs :parallel-build true - :source-map true :optimizations :none :output-dir "target/cljsbuild/node-test/out" :output-to "target/cljsbuild/node-test/main.js" - :npm-deps false}} + :npm-deps false + :aot-cache true}} :node-test-npm - {:source-paths ["src" "test"] + {:source-paths ["test/reagenttest/runtests.cljs"] + :watch-paths ["src" "test"] :compiler {:main "reagenttest.runtests" :target :nodejs :parallel-build true - :source-map true :optimizations :none :output-dir "target/cljsbuild/node-test-npm/out" - :output-to "target/cljsbuild/node-test-npm/main.js"}} + :output-to "target/cljsbuild/node-test-npm/main.js" + :aot-cache true}} + ;; With :advanched source-paths doesn't matter that much as + ;; Cljs compiler will only read :main file. :prod - {:source-paths ["src" "demo"] + {:source-paths ["demo"] :compiler {:main "reagentdemo.prod" :optimizations :advanced :elide-asserts true @@ -130,28 +136,27 @@ :stable-names true :output-to "target/cljsbuild/prod/public/js/main.js" :output-dir "target/cljsbuild/prod/out" ;; Outside of public, not published - :npm-deps false}} + :npm-deps false + :aot-cache true}} :prod-npm - {:source-paths ["src" "demo"] + {:source-paths ["demo"] :compiler {:main "reagentdemo.prod" :optimizations :advanced :elide-asserts true :pretty-print false - ;; :pseudo-names true :stable-names true :output-to "target/cljsbuild/prod-npm/public/js/main.js" :output-dir "target/cljsbuild/prod-npm/out" ;; Outside of public, not published - :process-shim true - :closure-warnings {:global-this :off}}} + :closure-warnings {:global-this :off} + :aot-cache true}} :prod-test - {:source-paths ["src" "demo"] + {:source-paths ["test"] :compiler {:main "reagenttest.runtests" :optimizations :advanced :elide-asserts true :pretty-print false - ;; :pseudo-names true :output-to "target/cljsbuild/prod-test/main.js" :output-dir "target/cljsbuild/prod-test/out" :closure-warnings {:global-this :off} @@ -159,7 +164,7 @@ :aot-cache true}} :prod-test-npm - {:source-paths ["src" "demo"] + {:source-paths ["test"] :compiler {:main "reagenttest.runtests" :optimizations :advanced :elide-asserts true @@ -168,5 +173,4 @@ :output-to "target/cljsbuild/prod-test-npm/main.js" :output-dir "target/cljsbuild/prod-test-npm/out" :closure-warnings {:global-this :off} - :aot-cache true}} - }}) + :aot-cache true}}}})