From 6845cdcbc59b97b328599fc78eb4d295bd31897f Mon Sep 17 00:00:00 2001 From: suzmii Date: Mon, 21 Sep 2026 13:50:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20Mac=20=E5=8C=85=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E8=84=9A=E6=9C=AC=E5=AF=B9=E5=90=88=E6=B3=95=E9=9A=8F?= =?UTF-8?q?=E5=8C=85=20npm=20=E7=9A=84=E8=AF=AF=E5=88=A4=20-=20check-macos?= =?UTF-8?q?-bundle=20=E7=9A=84=E3=80=8C=E5=8C=85=E9=87=8C=E4=B8=8D?= =?UTF-8?q?=E5=BE=97=E5=87=BA=E7=8E=B0=20node=5Fmodules=E3=80=8D=E9=97=A8?= =?UTF-8?q?=E7=A6=81=E5=8F=AA=E6=94=BE=E8=A1=8C=E4=BA=86=20game-runtime/no?= =?UTF-8?q?de/node=5Fmodules/npm=EF=BC=8C=E4=BD=86=20recursive=20readdir?= =?UTF-8?q?=20=E4=BC=9A=E6=8A=8A=E7=9B=AE=E5=BD=95=E9=A1=B9=20game-runtime?= =?UTF-8?q?/node/node=5Fmodules=20=E4=B9=9F=E5=88=97=E5=87=BA=E6=9D=A5?= =?UTF-8?q?=EF=BC=8C=E4=BA=8E=E6=98=AF=E5=90=88=E6=B3=95=E5=8C=85=E5=BF=85?= =?UTF-8?q?=E7=84=B6=E6=96=AD=E8=A8=80=E5=A4=B1=E8=B4=A5=20-=20=E8=BF=99?= =?UTF-8?q?=E6=9D=A1=E9=97=A8=E7=A6=81=E6=98=AF=20#439=20=E5=BC=95?= =?UTF-8?q?=E5=85=A5=E7=9A=84=EF=BC=8C=E4=B9=8B=E5=90=8E=E6=AF=8F=E6=AC=A1?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E9=83=BD=E6=AD=BB=E5=9C=A8=E6=9B=B4=E6=97=A9?= =?UTF-8?q?=E7=9A=84=E9=98=B6=E6=AE=B5=EF=BC=88staging/=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=EF=BC=89=EF=BC=8C=E7=9B=B4=E5=88=B0=202026-09-21=20arm64=20?= =?UTF-8?q?=E5=8D=95=E6=9E=B6=E6=9E=84=E8=B7=91=E9=80=9A=E6=89=8D=E7=AC=AC?= =?UTF-8?q?=E4=B8=80=E6=AC=A1=E8=B5=B0=E5=88=B0=E5=AE=83=EF=BC=9A12:58?= =?UTF-8?q?=E3=80=8113:24=E3=80=8113:43=20=E4=B8=89=E8=BD=AE=E9=83=BD?= =?UTF-8?q?=E6=8C=82=E5=9C=A8=E8=BF=99=E9=87=8C=20-=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=EF=BC=9A=E6=94=BE=E8=A1=8C=20npm=20=E7=9B=AE=E5=BD=95=E8=87=AA?= =?UTF-8?q?=E8=BA=AB=E3=80=81=E5=85=B6=E5=AD=90=E6=A0=91=E4=B8=8E=E5=AE=83?= =?UTF-8?q?=E7=9A=84=E4=B8=8A=E7=BA=A7=20node=5Fmodules=20=E5=AE=B9?= =?UTF-8?q?=E5=99=A8=E7=9B=AE=E5=BD=95=EF=BC=9B=E5=B7=B2=E7=94=A8=E7=9C=9F?= =?UTF-8?q?=E5=AE=9E=20arm64=20=E4=BA=A7=E7=89=A9=E8=B7=91=E9=80=9A?= =?UTF-8?q?=E5=AE=8C=E6=95=B4=20smoke=EF=BC=88=E8=B5=84=E6=BA=90=E3=80=81?= =?UTF-8?q?=E6=9E=B6=E6=9E=84=E3=80=81=E6=91=98=E8=A6=81=E3=80=81=E6=9D=83?= =?UTF-8?q?=E9=99=90=E3=80=81Codex=20=E6=AD=A3=E5=BC=8F=E6=9F=A5=E6=89=BE?= =?UTF-8?q?=E3=80=81app-server=20=E6=8F=A1=E6=89=8B=E3=80=81=E7=BC=BA?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E6=8B=92=E7=BB=9D=E5=85=A8=E9=83=A8=E9=80=9A?= =?UTF-8?q?=E8=BF=87=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scripts/check-macos-bundle.mjs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/apps/ai-game-creator-shell/scripts/check-macos-bundle.mjs b/apps/ai-game-creator-shell/scripts/check-macos-bundle.mjs index e23db686a..5d4fa9881 100644 --- a/apps/ai-game-creator-shell/scripts/check-macos-bundle.mjs +++ b/apps/ai-game-creator-shell/scripts/check-macos-bundle.mjs @@ -287,6 +287,13 @@ try { ]) { assert.ok(fs.existsSync(path.join(plugin, file)), file); } + // 随包 Node 的 npm 是包里唯一允许出现的 node_modules:除了 npm 目录自身与它的子项, + // 还要放行它的上级目录 `game-runtime/node/node_modules`(recursive readdir 会列出目录项, + // 少了这一条会让整个门禁对合法包失败——#439 引入后一直没被跑到,直到 2026-09-21 才暴露)。 + const allowedNodeModules = (file) => + file === 'game-runtime/node/node_modules' || + file === 'game-runtime/node/node_modules/npm' || + file.startsWith('game-runtime/node/node_modules/npm/'); const packageFiles = fs.readdirSync(resources, { recursive: true }); assert.ok( !packageFiles.some( @@ -294,8 +301,7 @@ try { /(^|\/)(\.env[^/]*|auth\.json|target|\.git)(\/|$)|\.(exe|dll)$/.test( file, ) || - (/(^|\/)node_modules(\/|$)/.test(file) && - !file.startsWith('game-runtime/node/node_modules/npm')), + (/(^|\/)node_modules(\/|$)/.test(file) && !allowedNodeModules(file)), ), ); assert.equal(run(executable, ['--version']).stdout.trim(), manifest.version);