fix(admin): 书封上传路径修复——media_folder 相对解析 + Astro 暂留 7.3.8

- Sveltia 对 folder 集合的 media_folder 按"相对集合目录"解析:写成
  content/posts/assets 会二次嵌套成 content/posts/content/posts/assets
  (用户在后台首次上传书封即踩,文件落错位置 + cover 引用缺失 →
  构建 ImageNotFound,发布链中断)。修为 assets,并把已落错位置的
  书封文件移到 content/posts/assets/
- Astro 7.4.4 需要 Node >= 22.23.4,宿主为 22.22.3:升级将锁死 CI
  构建(实测 CI 报 not supported)。本笔回落到 7.3.8 恢复发布链;
  Node 升级后另行升级 Astro(含全链验收)

验证: pnpm astro build 44 页 exit 0;书封图片入 content/posts/assets/
      与文章 cover 路径一致

Spec: none (后台路径修复 + 依赖回滚)

Co-authored-by: GLM-5.3
This commit is contained in:
wait4xandGLM-5.3 committed 2026-11-02 15:09:03 +08:00
1 parent 5c814f0866
commit 7c1462bde0
4 files changed
+80 -68

No files matched your search

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

+1 -1
View File
@@ -16,7 +16,7 @@
"@fontsource-variable/noto-serif-sc": "^5.3.1",
"@fontsource/jetbrains-mono": "^5.3.0",
"@fontsource/noto-sans-sc": "^5.3.1",
"astro": "^7.4.4",
"astro": "^7.3.8",
"astro-pagefind": "^2.0.1",
"exifr": "^7.1.3",
"lxgw-wenkai-screen-webfont": "^1.7.0",
+75 -66
View File
@@ -27,11 +27,11 @@ importers:
specifier: ^5.3.1
version: 5.3.1
astro:
specifier: ^7.4.4
version: 7.4.4(@astrojs/markdown-remark@7.3.5)(@types/node@24.19.2)(yaml@2.9.1)
specifier: ^7.3.8
version: 7.3.8(@astrojs/markdown-remark@7.3.5)(@types/node@24.19.2)(yaml@2.9.1)
astro-pagefind:
specifier: ^2.0.1
version: 2.0.1(astro@7.4.4(@astrojs/markdown-remark@7.3.5)(@types/node@24.19.2)(yaml@2.9.1))
version: 2.0.1(astro@7.3.8(@astrojs/markdown-remark@7.3.5)(@types/node@24.19.2)(yaml@2.9.1))
exifr:
specifier: ^7.1.3
version: 7.1.3
@@ -125,14 +125,21 @@ packages:
resolution: {integrity: sha512-IvwYLB8t1M86rKO4oPdBi9GP4gzXcgrVlNgocjwos1jeeUuEIV8d9Crn1PvYD/5IKteWOxpIHomf7e8iYlkE+Q==}
engines: {node: '>=22.12.0'}
'@astrojs/internal-helpers@0.12.0':
resolution: {integrity: sha512-pKPuwCDtO0L7zgmt1JGd9X4Aes1+0SX3IEBSqBNPHsScYdPMlfmed3Y7DTbXyF7E+8ylnb563o/0OzGQPOFehw==}
'@astrojs/internal-helpers@0.13.0':
resolution: {integrity: sha512-20jxQqnSmpskcGyad7N5l6Xf1gz0UCa6lNde44bEBdaXGpncEYfAZJ142r2ZgzBaG4dUyzGmhqZWv1INU2eiHQ==}
'@astrojs/markdown-remark@7.3.5':
resolution: {integrity: sha512-Xk0gvOMEpBul2zj5jZXS5WH2Gng/6dW7c3WWLXgip+LZGpY64frwTvBChznMtpnNIqVgFXSsu44RYrISojcodQ==}
'@astrojs/markdown-satteri@0.4.6':
resolution: {integrity: sha512-6biKp2lEAYycF3jhv91br+Otyf4EgDFkF1oRL9ks0u/m/YRGmI7XkGQ2MgaM35DslT03f7NtozKtlqfBNkp6bw==}
'@astrojs/markdown-satteri@0.4.3':
resolution: {integrity: sha512-PFbEHPnwUlLvpXd7RXrrKM+j12akF4bG+DSuNuoN+3eiwjOwp4HaPi+QQdbkBV7QEYXmzyKca50OJsmGxhNIUA==}
'@astrojs/prism@4.0.2':
resolution: {integrity: sha512-KTivpmnz6lDsC6o9H4+DNm2SrE/GHzw8cNAvEJwAvUT+eoaEnn/4NtbDNfRRaxaJHdp15gf+tfHAWiXR4wB3BA==}
engines: {node: '>=22.12.0'}
'@astrojs/prism@4.1.2':
resolution: {integrity: sha512-jMrUEpFDarDO1KWPvVc9eSa8DSfwBlwEOHwX+8zvZQpiqXRGDxFnOXHsYqV6DP7w+0qIgTr98gS1GdQlm8ypWg==}
@@ -144,9 +151,9 @@ packages:
'@astrojs/sitemap@3.7.4':
resolution: {integrity: sha512-LbKNC24bdUWcQf/pThB6qLlSqHojxGjZDURIzFocY8rlWnAn2t74nnhnK6S5x0NHriHoAduLEpVjRykmeGiVvA==}
'@astrojs/telemetry@3.4.2':
resolution: {integrity: sha512-2JOMRUxJrBSfiVDfeKLv1wBmvSIx1Y6u2YEO8awZ9qSq3u/rNAiUyFdOYi8dHv91kHrmYEQX7pRDw0J4xyj3UA==}
engines: {node: '>=22.23.4'}
'@astrojs/telemetry@3.3.3':
resolution: {integrity: sha512-C1TLn5sPJr0x4vk56piHWKbnqlEB8BKyte5Y45V02U+D7BGO5eMqZDH5aPjnkXQWJggvmsTXxH03QMZ9NgWLzQ==}
engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0}
'@babel/helper-string-parser@7.29.7':
resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==}
@@ -427,13 +434,6 @@ packages:
'@mdx-js/mdx@3.1.1':
resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==}
'@napi-rs/wasm-runtime@1.2.5':
resolution: {integrity: sha512-HshSvXzmBxNzqejd3k/KemgQ3hdREUYFRRrgxOZ+gPljDIsO2SDZrVZMd4Z/HsxudQbE62OVyVFE8z9BCurfjA==}
engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0}
peerDependencies:
'@emnapi/core': ^1.7.1 || ^2.0.0-alpha.4
'@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.4
'@napi-rs/wasm-runtime@1.2.6':
resolution: {integrity: sha512-mRyDmEw9/fCDXCGfL1sbgIw/GUK0PVxRW4YwgPN61F3LQ+fSyoBFarJVzgGyhF6kRzEQZ0FejDqm4WLXSeqQmw==}
engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0}
@@ -707,9 +707,9 @@ packages:
peerDependencies:
astro: ^2.0.4 || ^3 || ^4 || ^5 || ^6 || ^7
astro@7.4.4:
resolution: {integrity: sha512-e+BzhGCaIY/H1tV/BQPTbOPZVZ8wuu6+bbpc+3oSMH2UgoB1l9peSGASk6nswtYra9PO9OoMREhldKtQkZ5TVw==}
engines: {node: '>=22.23.4', npm: '>=9.6.5', pnpm: '>=7.1.0'}
astro@7.3.8:
resolution: {integrity: sha512-LHzDHSaV+YzZiR3EFndDYTLLeNeuMtP1qX1FLcCNUUHOCqTTIWPczy2UV3zpA5VqvJe5cWZolqM9Z8JFqR2i9w==}
engines: {node: '>=22.12.0', npm: '>=9.6.5', pnpm: '>=7.1.0'}
hasBin: true
peerDependencies:
'@astrojs/markdown-remark': ^7.3.0
@@ -826,9 +826,8 @@ packages:
resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'}
devalue@6.0.3:
resolution: {integrity: sha512-3woMEITftG1wKeO/4d/QXH1DVKctTSZg3jNGPpjp9hNr5Hos8MCFF5McTML5ZtgKDObm2R591B0spRp2IVernA==}
engines: {node: '>=18'}
devalue@5.9.4:
resolution: {integrity: sha512-sPAT4pztbu6586/hrhOnMKS17IJrvg12mXiSPSS3W5qDeN2RGgvZ0diZCm31dBbnevfVmujNO3IM2wrS4Y2Rhg==}
devlop@1.1.0:
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
@@ -930,13 +929,14 @@ packages:
picomatch:
optional: true
find-proc@0.2.0:
resolution: {integrity: sha512-a6h2nTrgB3g5Wrn4au9Ux4kMk7IJtyF6oA8uGn+mk3weLZssUtc1cp6meHIzzuW2o1srrBAxzkmXLbqjRkgB6w==}
engines: {node: ^20.19.0 || >=22.12.0}
flattie@1.1.1:
resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==}
engines: {node: '>=8'}
fnv1a-64@0.1.2:
resolution: {integrity: sha512-mJbcILTPybAR1jdOwt/lVv8N2cffeJFFP+gVbSAwLEx1ujXH27RpPd8Rokec/KX9c76UYIB6Co+H4lQzxPnJfA==}
fontace@0.4.1:
resolution: {integrity: sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==}
@@ -1338,6 +1338,9 @@ packages:
ofetch@1.5.1:
resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==}
ohash@2.0.12:
resolution: {integrity: sha512-65S/5gk9YSsaRjcyf7Nfa6h/d3E8/1gslpXfI4W7Dxn/oap8IKRuNT5VXkLQ1YFKIEg4apRY4Pj6aiwFzrDdmw==}
oniguruma-parser@0.12.2:
resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==}
@@ -1549,9 +1552,6 @@ packages:
space-separated-tokens@2.0.2:
resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
std-env@4.3.0:
resolution: {integrity: sha512-OtU/EgQ1kIm5KwqQpBC6ZEMXrZRui11w8zgfTWp8cdO9B8OaPsbA8bTHO2P+HNo1VlUTGMVBwPhydu6poeXiag==}
stringify-entities@4.0.4:
resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
@@ -1587,9 +1587,6 @@ packages:
resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==}
engines: {node: '>=12.0.0'}
tinyps@0.5.1:
resolution: {integrity: sha512-B6Ykif5HflC3AdDkS4Zst/2muYVfeXoVMy+KorqH80s/1x4vunIORpNySH681X7fjj+dFM9MDKD6/Hsccjb87Q==}
totalist@3.0.1:
resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
engines: {node: '>=6'}
@@ -1625,8 +1622,8 @@ packages:
unified@11.0.5:
resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
unifont@1.0.3:
resolution: {integrity: sha512-XGnEwj5sWdCbiBX01mWLSBncS0yMRjnLygau3IfdOlfjMacNIQvTGW4VH7pWBq+gGWArfSef/CensMLjMmIr/A==}
unifont@0.7.5:
resolution: {integrity: sha512-ULe/Cs+ZIsq+dcFofNkhqielCrUJnb5mr+Yc4EBM2VlL+6OZR6+cjtI2mT1bJvRBrVncqHAbLURxmPLcCXzWMg==}
unist-util-is@6.0.1:
resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==}
@@ -1840,7 +1837,7 @@ snapshots:
dependencies:
'@emnapi/core': 1.11.3
'@emnapi/runtime': 1.11.3
'@napi-rs/wasm-runtime': 1.2.5(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)
'@napi-rs/wasm-runtime': 1.2.6(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)
optional: true
'@astrojs/compiler-binding-win32-arm64-msvc@0.5.2':
@@ -1866,6 +1863,17 @@ snapshots:
dependencies:
'@astrojs/compiler-binding': 0.5.2
'@astrojs/internal-helpers@0.12.0':
dependencies:
'@types/hast': 3.0.5
'@types/mdast': 4.0.4
picomatch: 4.0.7
retext-smartypants: 6.2.0
shiki: 4.5.0
smol-toml: 1.9.1
unified: 11.0.5
yaml: 2.9.1
'@astrojs/internal-helpers@0.13.0':
dependencies:
'@types/hast': 3.0.5
@@ -1904,13 +1912,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@astrojs/markdown-satteri@0.4.6':
'@astrojs/markdown-satteri@0.4.3':
dependencies:
'@astrojs/internal-helpers': 0.13.0
'@astrojs/prism': 4.1.2
'@astrojs/internal-helpers': 0.12.0
'@astrojs/prism': 4.0.2
github-slugger: 2.0.0
satteri: 0.10.5
'@astrojs/prism@4.0.2':
dependencies:
prismjs: 1.30.0
'@astrojs/prism@4.1.2':
dependencies:
prismjs: 1.30.0
@@ -1926,7 +1938,7 @@ snapshots:
sitemap: 9.0.1
zod: 4.6.7
'@astrojs/telemetry@3.4.2':
'@astrojs/telemetry@3.3.3':
dependencies:
ci-info: 4.4.0
dset: 3.1.4
@@ -2002,7 +2014,7 @@ snapshots:
'@emnapi/core@1.11.3':
dependencies:
'@emnapi/wasi-threads': 1.2.3
tslib: 2.8.1
tslib: 2.9.1
optional: true
'@emnapi/runtime@1.11.1':
@@ -2022,7 +2034,7 @@ snapshots:
'@emnapi/wasi-threads@1.2.3':
dependencies:
tslib: 2.8.1
tslib: 2.9.1
optional: true
'@fontsource-variable/noto-sans-sc@5.3.1': {}
@@ -2173,13 +2185,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@napi-rs/wasm-runtime@1.2.5(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)':
dependencies:
'@emnapi/core': 1.11.3
'@emnapi/runtime': 1.11.3
'@tybys/wasm-util': 0.10.4
optional: true
'@napi-rs/wasm-runtime@1.2.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)':
dependencies:
'@emnapi/core': 1.11.1
@@ -2187,6 +2192,13 @@ snapshots:
'@tybys/wasm-util': 0.10.4
optional: true
'@napi-rs/wasm-runtime@1.2.6(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)':
dependencies:
'@emnapi/core': 1.11.3
'@emnapi/runtime': 1.11.3
'@tybys/wasm-util': 0.10.4
optional: true
'@nodable/entities@3.1.0': {}
'@oslojs/encoding@1.1.0': {}
@@ -2310,7 +2322,7 @@ snapshots:
'@tybys/wasm-util@0.10.4':
dependencies:
tslib: 2.8.1
tslib: 2.9.1
optional: true
'@types/debug@4.1.13':
@@ -2380,19 +2392,19 @@ snapshots:
astring@1.9.0: {}
astro-pagefind@2.0.1(astro@7.4.4(@astrojs/markdown-remark@7.3.5)(@types/node@24.19.2)(yaml@2.9.1)):
astro-pagefind@2.0.1(astro@7.3.8(@astrojs/markdown-remark@7.3.5)(@types/node@24.19.2)(yaml@2.9.1)):
dependencies:
'@pagefind/component-ui': 1.5.2
astro: 7.4.4(@astrojs/markdown-remark@7.3.5)(@types/node@24.19.2)(yaml@2.9.1)
astro: 7.3.8(@astrojs/markdown-remark@7.3.5)(@types/node@24.19.2)(yaml@2.9.1)
pagefind: 1.5.2
sirv: 3.0.2
astro@7.4.4(@astrojs/markdown-remark@7.3.5)(@types/node@24.19.2)(yaml@2.9.1):
astro@7.3.8(@astrojs/markdown-remark@7.3.5)(@types/node@24.19.2)(yaml@2.9.1):
dependencies:
'@astrojs/compiler-rs': 0.5.2
'@astrojs/internal-helpers': 0.13.0
'@astrojs/markdown-satteri': 0.4.6
'@astrojs/telemetry': 3.4.2
'@astrojs/internal-helpers': 0.12.0
'@astrojs/markdown-satteri': 0.4.3
'@astrojs/telemetry': 3.3.3
'@capsizecss/unpack': 4.0.1
'@clack/prompts': 1.8.1
'@oslojs/encoding': 1.1.0
@@ -2403,10 +2415,11 @@ snapshots:
clsx: 2.1.1
common-ancestor-path: 2.0.0
cookie: 2.0.1
devalue: 6.0.3
devalue: 5.9.4
diff: 9.0.0
dset: 3.1.4
es-module-lexer: 3.0.4
find-proc: 0.2.0
flattie: 1.1.1
fontace: 0.4.1
get-tsconfig: 5.0.0-beta.6
@@ -2431,9 +2444,8 @@ snapshots:
tinyclip: 1.0.3
tinyexec: 1.3.1
tinyglobby: 0.2.17
tinyps: 0.5.1
ultrahtml: 1.7.0
unifont: 1.0.3
unifont: 0.7.5
unstorage: 1.17.6
verkit: 0.5.0
vite: 8.3.5(@types/node@24.19.2)(yaml@2.9.1)
@@ -2563,7 +2575,7 @@ snapshots:
detect-libc@2.1.2: {}
devalue@6.0.3: {}
devalue@5.9.4: {}
devlop@1.1.0:
dependencies:
@@ -2680,9 +2692,9 @@ snapshots:
optionalDependencies:
picomatch: 4.0.7
flattie@1.1.1: {}
find-proc@0.2.0: {}
fnv1a-64@0.1.2: {}
flattie@1.1.1: {}
fontace@0.4.1:
dependencies:
@@ -3408,6 +3420,8 @@ snapshots:
node-fetch-native: 1.6.7
ufo: 1.6.4
ohash@2.0.12: {}
oniguruma-parser@0.12.2: {}
oniguruma-to-es@4.3.6:
@@ -3739,8 +3753,6 @@ snapshots:
space-separated-tokens@2.0.2: {}
std-env@4.3.0: {}
stringify-entities@4.0.4:
dependencies:
character-entities-html4: 2.1.0
@@ -3783,8 +3795,6 @@ snapshots:
fdir: 6.5.0(picomatch@4.0.7)
picomatch: 4.0.7
tinyps@0.5.1: {}
totalist@3.0.1: {}
trim-lines@3.0.1: {}
@@ -3817,11 +3827,10 @@ snapshots:
trough: 2.2.0
vfile: 6.0.3
unifont@1.0.3:
unifont@0.7.5:
dependencies:
css-tree: 3.2.1
fnv1a-64: 0.1.2
std-env: 4.3.0
ohash: 2.0.12
undici: 8.12.3
unist-util-is@6.0.1:
+4 -1
View File
@@ -28,7 +28,10 @@ collections:
slug: '{{slug}}'
summary: '{{title}} · {{category}}'
sortable_fields: [pubDate, title]
media_folder: content/posts/assets
# 注意:Sveltia 对 folder 集合的 media_folder 按"相对集合目录"解析
# (写成 content/posts/assets 会二次嵌套成 content/posts/content/posts/assets,
# 实测 2026-11-02 首上传即踩),故这里必须写 assets
media_folder: assets
public_folder: ./assets
fields:
- { label: 标题, name: title, widget: string }