Browse Source

separate :workers build

Tienson Qin 9 months ago
parent
commit
b122d453c2
5 changed files with 57 additions and 24 deletions
  1. 3 3
      package.json
  2. 1 1
      public/index.html
  3. 1 1
      resources/index.html
  4. 46 17
      shadow-cljs.edn
  5. 6 2
      webpack.config.js

+ 3 - 3
package.json

@@ -65,10 +65,10 @@
         "gulp:build": "cross-env NODE_ENV=production gulp build",
         "css:build": "postcss tailwind.all.css -o static/css/style.css --verbose --env production",
         "css:watch": "cross-env TAILWIND_MODE=watch postcss tailwind.all.css -o static/css/style.css --verbose --watch",
-        "cljs:watch": "clojure -M:cljs watch app electron",
+        "cljs:watch": "clojure -M:cljs watch app workers electron",
         "cljs:watch-storybook": "clojure -M:cljs watch stories-dev",
-        "cljs:app-watch": "clojure -M:cljs watch app",
-        "cljs:electron-watch": "clojure -M:cljs watch app electron --config-merge \"{:asset-path \\\"./js\\\"}\"",
+        "cljs:app-watch": "clojure -M:cljs watch app workers",
+        "cljs:electron-watch": "clojure -M:cljs watch app workers electron --config-merge \"{:asset-path \\\"./js\\\"}\"",
         "cljs:release": "clojure -M:cljs release app publishing electron",
         "cljs:release-electron": "clojure -M:cljs release app electron --debug && clojure -M:cljs release publishing",
         "cljs:release-app": "clojure -M:cljs release app",

+ 1 - 1
public/index.html

@@ -55,7 +55,7 @@
 <script defer src="/static/js/lsplugin.core.js"></script>
 <script defer src="/static/js/react.production.min.js"></script>
 <script defer src="/static/js/react-dom.production.min.js"></script>
-<script defer src="/static/js/libs/bundle.js"></script>
+<script defer src="/static/js/libs/main-bundle.js"></script>
 <script defer src="/static/js/ui.js"></script>
 <script defer src="/static/js/shared.js"></script>
 <script defer src="/static/js/main.js"></script>

+ 1 - 1
resources/index.html

@@ -54,7 +54,7 @@ const portal = new MagicPortal(worker);
 <script defer src="./js/lsplugin.core.js"></script>
 <script defer src="./js/react.production.min.js"></script>
 <script defer src="./js/react-dom.production.min.js"></script>
-<script defer src="./js/libs/bundle.js"></script>
+<script defer src="./js/libs/main-bundle.js"></script>
 <script defer src="./js/ui.js"></script>
 <script defer src="./js/shared.js"></script>
 <script defer src="./js/main.js"></script>

+ 46 - 17
shadow-cljs.edn

@@ -12,7 +12,7 @@
  {:app {:target        :browser
         :module-loader true
         :js-options    {:js-provider    :external
-                        :external-index "target/index.js"
+                        :external-index "target/main.js"
                         :external-index-format :esm
                         :entry-keys ["module" "browser" "main"]
                         :export-conditions ["module" "import", "browser" "require" "default"]
@@ -34,17 +34,7 @@
                          :depends-on #{:main}}
                         :tldraw
                         {:entries [frontend.extensions.tldraw]
-                         :depends-on #{:main}}
-                        :db-worker
-                        {:init-fn frontend.worker.db-worker/init
-                         :depends-on #{:shared}
-                         :web-worker true
-                         :prepend "importScripts('libs/bundle.js');\n"}
-                        :inference-worker
-                        {:init-fn frontend.inference-worker.inference-worker/init
-                         :depends-on #{:shared}
-                         :web-worker true
-                         :prepend "importScripts('libs/bundle.js');\n"}}
+                         :depends-on #{:main}}}
 
         :output-dir       "./static/js"
         :asset-path       "/static/js"
@@ -77,6 +67,49 @@
                    :preloads [devtools.preload
                               shadow.remote.runtime.cljs.browser]}}
 
+  :workers {:target        :browser
+            :module-loader true
+            :js-options    {:js-provider    :external
+                            :external-index "target/workers.js"
+                            :external-index-format :esm
+                            :entry-keys ["module" "browser" "main"]
+                            :export-conditions ["module" "import", "browser" "require" "default"]}
+            :modules       {:shared
+                            {:entries []}
+                            :db-worker
+                            {:init-fn frontend.worker.db-worker/init
+                             :depends-on #{:shared}
+                             :web-worker true
+                             :prepend "importScripts('libs/workers-bundle.js');\n"}
+                            :inference-worker
+                            {:init-fn frontend.inference-worker.inference-worker/init
+                             :depends-on #{:shared}
+                             :web-worker true
+                             :prepend "importScripts('libs/workers-bundle.js');\n"}}
+
+            :output-dir       "./static/js"
+            :asset-path       "/static/js"
+            :release          {:asset-path "https://asset.logseq.com/static/js"}
+            :compiler-options {:infer-externs      :auto
+                               :output-feature-set :es-next-in
+                               :source-map true
+                               :externs ["datascript/externs.js"
+                                         "externs.js"]
+                               :warnings {:fn-deprecated false
+                                          :redef false}
+                               :cross-chunk-method-motion false}
+            :closure-defines {goog.debug.LOGGING_ENABLED true}
+
+        ;; NOTE: electron, browser/mobile-app use different asset-paths.
+        ;;   For browser/mobile-app devs, assets are located in /static/js(via HTTP root).
+        ;;   For electron devs, assets are located in ./js(via relative path).
+        ;; :dev      {:asset-path "./js"}
+            :devtools {:before-load frontend.core/stop          ;; before live-reloading any code call this function
+                       :after-load frontend.core/start          ;; after live-reloading finishes call this function
+                       :watch-path "/static"
+                       :preloads [devtools.preload
+                                  shadow.remote.runtime.cljs.browser]}}
+
   :electron {:target :node-script
              :output-to "static/electron.js"
              :main electron.core/main
@@ -137,11 +170,7 @@
                                 :depends-on #{:main}}
                                :tldraw
                                {:entries    [frontend.extensions.tldraw]
-                                :depends-on #{:main}}
-                               :db-worker
-                               {:init-fn   frontend.worker.db-worker/init
-                                :depends-on #{:shared}
-                                :web-worker true}}
+                                :depends-on #{:main}}}
 
                :output-dir       "./static/js/publishing"
                :asset-path       "static/js"

+ 6 - 2
webpack.config.js

@@ -3,10 +3,14 @@ const webpack = require('webpack');
 
 module.exports = {
   mode: "development",
-  entry: './target/index.js',
+  entry: {
+    main : "./target/main.js",
+    workers : "./target/workers.js"
+  },
+
   output: {
     path: path.resolve(__dirname, 'static/js/libs'),
-    filename: 'bundle.js',
+    filename: '[name]-bundle.js',
     clean: true,
     chunkLoading: false,
   },