From bdb10c1683ea87b6030265ec81ebf46c28fb1936 Mon Sep 17 00:00:00 2001 From: mole404 <248403041+mole404@users.noreply.github.com> Date: Tue, 29 Sep 2026 00:34:55 +0800 Subject: [PATCH] =?UTF-8?q?fix(build):=20=E5=89=8D=E7=AB=AF=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E9=87=8D=E5=BB=BA=E4=B8=8D=E5=86=8D=E7=A0=B4=E5=9D=8F?= =?UTF-8?q?=E8=A1=A5=E4=B8=81=E8=87=AA=E8=AF=81=EF=BC=88webpack=20?= =?UTF-8?q?=E4=BC=9A=E5=8E=8B=E7=BC=A9=20mix.copy=20=E8=BF=87=E5=8E=BB?= =?UTF-8?q?=E7=9A=84=E6=96=87=E4=BB=B6=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - webpack.mix.js:去掉 context-js 的 mix.copy —— --production 下 webpack 会对 copy 过去的文件做 压缩改名,public/js 里的补丁版会丢掉 isIOSWebKit / LONG_PRESS_DELAY = 250 / installMenuGuard / MENU_OPEN_GRACE 这些标记,既让 Dockerfile 的补丁自证 grep 失败,又与 resources/js 不再字节一致 (CI 的「两份 context-js.js 内容一致」测试正是抓出这个问题的) - 新增 scripts/copy-patched-assets.js,package.json 的 production 收尾调用它做字节级拷贝, 保证 public/js 与 resources/js 两份永远一模一样 - user/images.blade.php 的 md5 同步更新(界面改造后重算) 验证:npm run prod 通过;两份 context-js.js md5 均为 e114c840…(含全部补丁标记); 70/70 jsdom 行为测试通过;verify_repo.py 通过 --- .msg.txt | 12 + Dockerfile | 4 +- src/package.json | 2 +- src/public/js/context-js/context-js.js | 727 ++++++++++++++++++++++++- src/public/mix-manifest.json | 1 - src/scripts/copy-patched-assets.js | 23 + src/webpack.mix.js | 6 +- 7 files changed, 769 insertions(+), 6 deletions(-) create mode 100644 .msg.txt create mode 100644 src/scripts/copy-patched-assets.js diff --git a/.msg.txt b/.msg.txt new file mode 100644 index 0000000..ff8fcf1 --- /dev/null +++ b/.msg.txt @@ -0,0 +1,12 @@ +fix(build): 前端资源重建不再破坏补丁自证(webpack 会压缩 mix.copy 过去的文件) + +- webpack.mix.js:去掉 context-js 的 mix.copy —— --production 下 webpack 会对 copy 过去的文件做 + 压缩改名,public/js 里的补丁版会丢掉 isIOSWebKit / LONG_PRESS_DELAY = 250 / installMenuGuard / + MENU_OPEN_GRACE 这些标记,既让 Dockerfile 的补丁自证 grep 失败,又与 resources/js 不再字节一致 + (CI 的「两份 context-js.js 内容一致」测试正是抓出这个问题的) +- 新增 scripts/copy-patched-assets.js,package.json 的 production 收尾调用它做字节级拷贝, + 保证 public/js 与 resources/js 两份永远一模一样 +- user/images.blade.php 的 md5 同步更新(界面改造后重算) + +验证:npm run prod 通过;两份 context-js.js md5 均为 e114c840…(含全部补丁标记); +70/70 jsdom 行为测试通过;verify_repo.py 通过 diff --git a/Dockerfile b/Dockerfile index b4f545b..91213d5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -101,7 +101,7 @@ RUN php -r "file_exists('.env') || copy('.env.example', '.env');" \ RUN printf '%s\n' \ 'e114c840101d021aa416239196925624 ./public/js/context-js/context-js.js' \ 'e114c840101d021aa416239196925624 ./resources/js/context-js.js' \ - 'ec25ecc2a4f09395db5a50de1883d521 ./resources/views/user/images.blade.php' \ + 'fb65dc33a394fc28e14af5ab92272406 ./resources/views/user/images.blade.php' \ | md5sum -c - \ && grep -q "context-js.js') . '?v=ios-longpress4'" ./resources/views/user/images.blade.php \ && grep -q 'isIOSWebKit' ./public/js/context-js/context-js.js \ @@ -118,7 +118,7 @@ RUN printf '%s\n' \ "fork_sha=${FORK_SHA}" \ "lsky_commit=${LSKY_COMMIT}" \ "context_js_md5=e114c840101d021aa416239196925624" \ - "images_blade_md5=ec25ecc2a4f09395db5a50de1883d521" \ + "images_blade_md5=fb65dc33a394fc28e14af5ab92272406" \ > .code-revision \ && cat .code-revision diff --git a/src/package.json b/src/package.json index e747015..2ebc43a 100644 --- a/src/package.json +++ b/src/package.json @@ -7,7 +7,7 @@ "watch-poll": "mix watch -- --watch-options-poll=1000", "hot": "mix watch --hot", "prod": "npm run production", - "production": "mix --production" + "production": "mix --production && node scripts/copy-patched-assets.js" }, "devDependencies": { "@fortawesome/fontawesome-free": "^5.15.4", diff --git a/src/public/js/context-js/context-js.js b/src/public/js/context-js/context-js.js index cc072ad..6371b7d 100644 --- a/src/public/js/context-js/context-js.js +++ b/src/public/js/context-js/context-js.js @@ -1 +1,726 @@ -window.context=window.context||function(){let e={fadeSpeed:100,filter:function(e){},above:"auto",preventDoubleContext:!0,compress:!1};let t=[],n=!1,o=0,i=0,a=!1;function r(e,r){!function(){if(n)return;n=!0;let e=t.map((function(e){return e+", "+e+" *"})).join(", ")+", .dropdown-context, .dropdown-context *";$('