refactor: use webpack only for workers

This commit is contained in:
Tienson Qin
2025-09-01 10:26:22 +08:00
parent a59b76bb56
commit abe03fdaca
11 changed files with 93 additions and 71 deletions

View File

@@ -78,7 +78,7 @@ jobs:
# NOTE: require the app to be build with DEV-RELEASE flag # NOTE: require the app to be build with DEV-RELEASE flag
- name: Prepare E2E test build - name: Prepare E2E test build
run: | run: |
yarn gulp:build && clojure -M:cljs release app workers --config-merge "{:closure-defines {frontend.config/DEV-RELEASE true}}" --debug && yarn webpack-app-build yarn gulp:build && clojure -M:cljs release app db-worker inference-worker --config-merge "{:closure-defines {frontend.config/DEV-RELEASE true}}" --debug && yarn webpack-app-build
- name: Run e2e tests - name: Run e2e tests
run: cd clj-e2e && timeout 30m bb dev run: cd clj-e2e && timeout 30m bb dev

View File

@@ -79,7 +79,7 @@ jobs:
# NOTE: require the app to be build with DEV-RELEASE flag # NOTE: require the app to be build with DEV-RELEASE flag
- name: Prepare E2E test build - name: Prepare E2E test build
run: | run: |
yarn gulp:build && clojure -M:cljs release app workers --config-merge "{:closure-defines {frontend.config/DEV-RELEASE true}}" --debug && yarn webpack-app-build yarn gulp:build && clojure -M:cljs release app db-worker inference-worker --config-merge "{:closure-defines {frontend.config/DEV-RELEASE true}}" --debug && yarn webpack-app-build
rsync -avz --exclude node_modules --exclude android --exclude ios ./static/ ./public/ rsync -avz --exclude node_modules --exclude android --exclude ios ./static/ ./public/
ls -lR ./public ls -lR ./public

View File

@@ -42,7 +42,7 @@ jobs:
- name: Build Released-Web - name: Build Released-Web
run: | run: |
yarn gulp:build && clojure -M:cljs release app workers --config-merge '{:compiler-options {:source-map true :source-map-include-sources-content true :source-map-detail-level :symbols}}' && yarn webpack-app-build yarn gulp:build && clojure -M:cljs release app db-worker inference-worker --config-merge '{:compiler-options {:source-map true :source-map-include-sources-content true :source-map-detail-level :symbols}}' && yarn webpack-app-build
rsync -avz --exclude node_modules --exclude android --exclude ios --exclude mobile ./static/ ./public/ rsync -avz --exclude node_modules --exclude android --exclude ios --exclude mobile ./static/ ./public/
ls -lR ./public && mkdir r2 && mv ./public/js/main.js.map ./r2/db-test.main.js.map ls -lR ./public && mkdir r2 && mv ./public/js/main.js.map ./r2/db-test.main.js.map
sed -i 's/=main.js.map/=https:\/\/assets.logseq.io\/db-test.main.js.map/g' ./public/js/main.js sed -i 's/=main.js.map/=https:\/\/assets.logseq.io\/db-test.main.js.map/g' ./public/js/main.js

View File

@@ -124,7 +124,6 @@ necessary db filtering"
[:script {:src "static/js/react.production.min.js"}] [:script {:src "static/js/react.production.min.js"}]
[:script {:src "static/js/react-dom.production.min.js"}] [:script {:src "static/js/react-dom.production.min.js"}]
[:script {:src "static/js/ui.js"}] [:script {:src "static/js/ui.js"}]
[:script {:src "static/js/main-bundle.js"}]
[:script {:src "static/js/main.js"}] [:script {:src "static/js/main.js"}]
;; Deferring scripts above results in errors ;; Deferring scripts above results in errors
[:script {:defer true :src "static/js/interact.min.js"}] [:script {:defer true :src "static/js/interact.min.js"}]

View File

@@ -184,14 +184,12 @@ const common = {
syncWorkersToMobile () { syncWorkersToMobile () {
return gulp.src([ return gulp.src([
path.join(outputPath, 'js/db-worker.js'), path.join(outputPath, 'js/db-worker.js'),
path.join(outputPath, 'js/inference-worker.js'),
], { base: outputJsPath }).pipe(gulp.dest(mobileJsPath)) ], { base: outputJsPath }).pipe(gulp.dest(mobileJsPath))
}, },
keepSyncWorkersToMobile () { keepSyncWorkersToMobile () {
return gulp.watch([ return gulp.watch([
path.join(outputPath, 'js/db-worker.js'), path.join(outputPath, 'js/db-worker.js'),
path.join(outputPath, 'js/inference-worker.js'),
], { ignoreInitial: false }, common.syncWorkersToMobile) ], { ignoreInitial: false }, common.syncWorkersToMobile)
}, },

View File

@@ -40,6 +40,7 @@
"purgecss": "4.0.2", "purgecss": "4.0.2",
"semver": "7.5.2", "semver": "7.5.2",
"shadow-cljs": "2.28.23", "shadow-cljs": "2.28.23",
"source-map-loader": "^5.0.0",
"stylelint": "^13.8.0", "stylelint": "^13.8.0",
"stylelint-config-standard": "^20.0.0", "stylelint-config-standard": "^20.0.0",
"tailwindcss": "3.3.5", "tailwindcss": "3.3.5",
@@ -51,7 +52,7 @@
"scripts": { "scripts": {
"watch": "run-p gulp:watch cljs:watch webpack-app-watch", "watch": "run-p gulp:watch cljs:watch webpack-app-watch",
"electron-watch": "run-p gulp:watch cljs:electron-watch webpack-app-watch", "electron-watch": "run-p gulp:watch cljs:electron-watch webpack-app-watch",
"app-watch": "run-p gulp:watch cljs:app-watch webpack-app-watch", "app-watch": "run-p gulp:watch webpack-app-watch cljs:app-watch",
"mobile-watch": "run-p gulp:mobile-watch cljs:mobile-watch webpack-mobile-watch", "mobile-watch": "run-p gulp:mobile-watch cljs:mobile-watch webpack-mobile-watch",
"dev": "run-p gulp:watch gulp:mobile-watch cljs:dev-watch webpack", "dev": "run-p gulp:watch gulp:mobile-watch cljs:dev-watch webpack",
"release": "run-s gulp:build cljs:release webpack-app-build", "release": "run-s gulp:build cljs:release webpack-app-build",
@@ -77,27 +78,27 @@
"gulp:buildMobile": "cross-env NODE_ENV=production gulp buildMobile", "gulp:buildMobile": "cross-env NODE_ENV=production gulp buildMobile",
"css:build": "postcss tailwind.all.css -o static/css/style.css --verbose --env production", "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", "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 workers electron", "cljs:watch": "clojure -M:cljs watch app db-worker inference-worker electron",
"cljs:storybook-watch": "clojure -M:cljs watch stories-dev", "cljs:storybook-watch": "clojure -M:cljs watch stories-dev",
"gulp:mobile-watch": "gulp watchMobile", "gulp:mobile-watch": "gulp watchMobile",
"css:mobile-build": "postcss tailwind.mobile.css -o static/mobile/css/style.css --verbose --env production", "css:mobile-build": "postcss tailwind.mobile.css -o static/mobile/css/style.css --verbose --env production",
"css:mobile-watch": "cross-env TAILWIND_MODE=watch postcss tailwind.mobile.css -o static/mobile/css/style.css --verbose --watch", "css:mobile-watch": "cross-env TAILWIND_MODE=watch postcss tailwind.mobile.css -o static/mobile/css/style.css --verbose --watch",
"cljs:mobile-watch": "clojure -M:cljs watch mobile workers --config-merge \"{:output-dir \\\"./static/mobile/js\\\" :asset-path \\\"/static/mobile/js\\\" :release {:asset-path \\\"http://localhost\\\"}}\"", "cljs:mobile-watch": "clojure -M:cljs watch mobile db-worker inference-worker --config-merge \"{:output-dir \\\"./static/mobile/js\\\" :asset-path \\/static/mobile/js\\\" :release {:asset-path \\\"http://localhost\\\"}}\"",
"cljs:release-mobile": "clojure -M:cljs release mobile workers --config-merge \"{:output-dir \\\"./static/mobile/js\\\" :asset-path \\\"/static/mobile/js\\\" :release {:asset-path \\\"http://localhost\\\"}}\"", "cljs:release-mobile": "clojure -M:cljs release mobile db-worker inference-worker --config-merge \"{:output-dir \\\"./static/mobile/js\\\" :asset-path \\\"/static/mobile/js\\\" :release {:asset-path \\\"http://localhost\\\"}}\"",
"cljs:dev-watch": "clojure -M:cljs watch app workers electron mobile", "cljs:dev-watch": "clojure -M:cljs watch app db-worker inference-worker electron mobile",
"cljs:app-watch": "clojure -M:cljs watch app workers", "cljs:app-watch": "clojure -M:cljs watch app db-worker inference-worker",
"cljs:electron-watch": "clojure -M:cljs watch app workers electron --config-merge \"{:asset-path \\\"./js\\\"}\"", "cljs:electron-watch": "clojure -M:cljs watch app db-worker inference-worker electron --config-merge \"{:asset-path \\\"./js\\\"}\"",
"cljs:release": "clojure -M:cljs release app workers publishing electron", "cljs:release": "clojure -M:cljs release app db-worker inference-worker publishing electron",
"cljs:release-electron": "clojure -M:cljs release app workers electron --debug && clojure -M:cljs release publishing", "cljs:release-electron": "clojure -M:cljs release app db-worker inference-worker electron --debug && clojure -M:cljs release publishing",
"cljs:release-app": "clojure -M:cljs release app workers", "cljs:release-app": "clojure -M:cljs release app db-worker inference-worker",
"cljs:release-publishing": "clojure -M:cljs release app publishing", "cljs:release-publishing": "clojure -M:cljs release app publishing",
"cljs:test": "clojure -M:test compile test", "cljs:test": "clojure -M:test compile test",
"cljs:run-test": "node static/tests.js", "cljs:run-test": "node static/tests.js",
"cljs:dev-release-app": "clojure -M:cljs release app workers --config-merge \"{:closure-defines {frontend.config/DEV-RELEASE true}}\"", "cljs:dev-release-app": "clojure -M:cljs release app db-worker inference-worker --config-merge \"{:closure-defines {frontend.config/DEV-RELEASE true}}\"",
"cljs:dev-release-electron": "clojure -M:cljs release app workers electron --debug --config-merge \"{:closure-defines {frontend.config/DEV-RELEASE true}}\" && clojure -M:cljs release publishing", "cljs:dev-release-electron": "clojure -M:cljs release app db-worker inference-worker electron --debug --config-merge \"{:closure-defines {frontend.config/DEV-RELEASE true}}\" && clojure -M:cljs release publishing",
"cljs:debug": "clojure -M:cljs release app workers --debug", "cljs:debug": "clojure -M:cljs release app db-worker inference-worker --debug",
"cljs:report": "clojure -M:cljs run shadow.cljs.build-report app workers report.html", "cljs:report": "clojure -M:cljs run shadow.cljs.build-report app db-worker inference-worker report.html",
"cljs:build-electron": "clojure -A:cljs compile app workers electron", "cljs:build-electron": "clojure -A:cljs compile app db-worker inference-worker electron",
"cljs:lint": "clojure -M:clj-kondo --parallel --lint src --cache false", "cljs:lint": "clojure -M:clj-kondo --parallel --lint src --cache false",
"ios:dev": "cross-env PLATFORM=ios gulp cap", "ios:dev": "cross-env PLATFORM=ios gulp cap",
"android:dev": "cross-env PLATFORM=android gulp cap", "android:dev": "cross-env PLATFORM=android gulp cap",

View File

@@ -58,7 +58,6 @@ const portal = new MagicPortal(worker);
<script defer src="./js/lsplugin.core.js"></script> <script defer src="./js/lsplugin.core.js"></script>
<script defer src="./js/react.production.min.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/react-dom.production.min.js"></script>
<script defer src="./js/main-bundle.js"></script>
<script defer src="./js/ui.js"></script> <script defer src="./js/ui.js"></script>
<script defer src="./js/main.js"></script> <script defer src="./js/main.js"></script>
<script defer src="./js/amplify.js"></script> <script defer src="./js/amplify.js"></script>

View File

@@ -36,7 +36,6 @@ const portal = new MagicPortal(worker);
<script defer src="./js/ui.js"></script> <script defer src="./js/ui.js"></script>
<script defer src="./js/amplify.js"></script> <script defer src="./js/amplify.js"></script>
<script defer src="./js/silkhq.js"></script> <script defer src="./js/silkhq.js"></script>
<script defer src="./js/main-bundle.js"></script>
<script defer src="./js/main.js"></script> <script defer src="./js/main.js"></script>
<script defer src="./js/code-editor.js"></script> <script defer src="./js/code-editor.js"></script>
<script> <script>

View File

@@ -14,12 +14,7 @@
:builds :builds
{:app {:target :browser {:app {:target :browser
:module-loader true :module-loader true
:js-options {:js-provider :external :js-options {:ignore-asset-requires true
:external-index "target/main.js"
:external-index-format :esm
:entry-keys ["module" "browser" "main"]
:export-conditions ["module" "import", "browser" "require" "default"]
:ignore-asset-requires true
:resolve {"react" {:target :global :resolve {"react" {:target :global
:global "React"} :global "React"}
"react-dom" {:target :global "react-dom" {:target :global
@@ -65,42 +60,59 @@
;; :ignore-warnings true ;; :ignore-warnings true
}} }}
:workers {:target :browser :db-worker {:target :browser
:module-loader true :js-options {:js-provider :external
:js-options {:js-provider :external :external-index "target/db-worker.js"
:external-index "target/workers.js" :external-index-format :esm
:external-index-format :esm :entry-keys ["module" "browser" "main"]
:entry-keys ["module" "browser" "main"] :export-conditions ["module" "import", "browser" "require" "default"]}
:export-conditions ["module" "import", "browser" "require" "default"]} :modules {:db-worker
:modules {:workers-shared {:entries []} {:init-fn frontend.worker.db-worker/init
:db-worker :web-worker true
{:init-fn frontend.worker.db-worker/init :prepend-js "importScripts('db-worker-bundle.js');"}}
:web-worker true
:prepend "importScripts('workers-bundle.js');\n"
:depends-on #{:workers-shared}}
:inference-worker
{:init-fn frontend.inference-worker.inference-worker/init
:web-worker true
:prepend "importScripts('workers-bundle.js');\n"
:depends-on #{:workers-shared}}}
:output-dir "./static/js" :output-dir "./static/js"
:asset-path "/static/js" :asset-path "/static/js"
:release {:asset-path "https://asset.logseq.com/static/js"} :release {:asset-path "https://asset.logseq.com/static/js"}
:compiler-options {:infer-externs :auto :compiler-options {:infer-externs :auto
:output-feature-set :es-next-in :output-feature-set :es-next-in
:source-map true :source-map true
:externs ["datascript/externs.js" :externs ["datascript/externs.js"
"externs.js"] "externs.js"]
:warnings {:fn-deprecated false :warnings {:fn-deprecated false
:redef false}} :redef false}}
:closure-defines {goog.debug.LOGGING_ENABLED true} :closure-defines {goog.debug.LOGGING_ENABLED true}
:devtools {:before-load frontend.core/stop ;; before live-reloading any code call this function :devtools {:watch-path "/static"
:after-load frontend.core/start ;; after live-reloading finishes call this function :preloads [devtools.preload
:watch-path "/static" shadow.remote.runtime.cljs.browser]
:preloads [devtools.preload :loader-mode :eval}}
shadow.remote.runtime.cljs.browser]
:loader-mode :eval}} :inference-worker {:target :browser
:module-loader true
:js-options {:js-provider :external
:external-index "target/inference-worker.js"
:external-index-format :esm
:entry-keys ["module" "browser" "main"]
:export-conditions ["module" "import", "browser" "require" "default"]}
:modules {:inference-worker
{:init-fn frontend.inference-worker.inference-worker/init
:web-worker true
:prepend-js "importScripts('inference-worker-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}}
:closure-defines {goog.debug.LOGGING_ENABLED true}
:devtools {:watch-path "/static"
:preloads [devtools.preload
shadow.remote.runtime.cljs.browser]}}
:mobile {:target :browser :mobile {:target :browser
:module-loader true :module-loader true
:js-options {:js-provider :external :js-options {:js-provider :external
@@ -218,7 +230,7 @@
:externs ["datascript/externs.js" :externs ["datascript/externs.js"
"externs.js"] "externs.js"]
:warnings {:fn-deprecated false :warnings {:fn-deprecated false
:redef false} } :redef false}}
:devtools {:before-load frontend.core/stop :devtools {:before-load frontend.core/stop
:after-load frontend.core/start :after-load frontend.core/start
:preloads [devtools.preload]}} :preloads [devtools.preload]}}

View File

@@ -29,8 +29,8 @@ var config = {
var AppConfig = Object.assign({}, config, { var AppConfig = Object.assign({}, config, {
name: "app", name: "app",
entry: { entry: {
main : "./target/main.js", "db-worker" : "./target/db-worker.js",
workers : "./target/workers.js", "inference-worker" : "./target/inference-worker.js"
}, },
output: { output: {
@@ -44,8 +44,7 @@ var AppConfig = Object.assign({}, config, {
var MobileConfig = Object.assign({}, config, { var MobileConfig = Object.assign({}, config, {
name: "mobile", name: "mobile",
entry: { entry: {
main : "./target/mobile.js", "db-worker" : "./target/db-worker.js",
workers : "./target/workers.js",
}, },
output: { output: {

View File

@@ -5359,6 +5359,13 @@ iconv-lite@0.4.24:
dependencies: dependencies:
safer-buffer ">= 2.1.2 < 3" safer-buffer ">= 2.1.2 < 3"
iconv-lite@^0.6.3:
version "0.6.3"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
dependencies:
safer-buffer ">= 2.1.2 < 3.0.0"
ieee754@^1.1.13, ieee754@^1.1.4: ieee754@^1.1.13, ieee754@^1.1.4:
version "1.2.1" version "1.2.1"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
@@ -8955,7 +8962,7 @@ safe-regex@^1.1.0:
dependencies: dependencies:
ret "~0.1.10" ret "~0.1.10"
"safer-buffer@>= 2.1.2 < 3": "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0":
version "2.1.2" version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
@@ -9404,11 +9411,19 @@ socket.io@^4.7.2:
socket.io-adapter "~2.5.2" socket.io-adapter "~2.5.2"
socket.io-parser "~4.2.4" socket.io-parser "~4.2.4"
source-map-js@^1.2.1: source-map-js@^1.0.2, source-map-js@^1.2.1:
version "1.2.1" version "1.2.1"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
source-map-loader@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-5.0.0.tgz#f593a916e1cc54471cfc8851b905c8a845fc7e38"
integrity sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==
dependencies:
iconv-lite "^0.6.3"
source-map-js "^1.0.2"
source-map-resolve@^0.5.0: source-map-resolve@^0.5.0:
version "0.5.3" version "0.5.3"
resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"