mirror of
https://github.com/ZHANGTIANYAO1/teamspeak-music-bot.git
synced 2026-10-01 20:42:50 +08:00
feat(setup)!: require Node 22.12+ and drop Node 20 (#152)
better-sqlite3 stopped publishing prebuilt binaries for Node 20's ABI
(115) in 12.10.0 - upstream, not a mirror gap:
12.8.0 / 12.9.0 115 127 131 137 141
12.10.0+ 127 137 141 147
`better-sqlite3: ^12.8.0` resolves well past that, so every Node 20
install 404'd on the CDN, fell through to the source build, and demanded
Python plus a C++ toolchain before the bot could start at all. package.json
went on claiming `^20.19.0` worked, and the README went on recommending
Node 20 as one of two blessed versions. It was not a supported
configuration in any meaningful sense - it was a trap.
So say so up front: engines, both setup scripts, and the Docker images now
require Node 22.12+ (or 24+, which still needs a source build for opus).
The version gate in setup.bat / setup.sh is kept byte-identical to the
engines range, as before.
Also copy scripts/lib/console-log.mjs into the production image. The
previous commit had check-native.mjs import it, and the Dockerfile copies
check-native.mjs in on its own for `docker exec ... npm start` - without
its dependency that preflight now dies with ERR_MODULE_NOT_FOUND.
BREAKING CHANGE: Node 20 is no longer supported. Node 22.12 LTS or newer
is required; setup refuses to run on anything older.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
5e9ae49f52
commit
a804b2edc1
6 files changed
+35
-29
No files matched your search
@@ -417,11 +417,12 @@ function buildFromSource(command) {
|
||||
/**
|
||||
* A 404 from the CDN is not a mirror outage: it means this exact package
|
||||
* version publishes no prebuilt binary for the running Node ABI at all.
|
||||
* better-sqlite3 dropped its Node 20 (ABI 115) builds in 12.10.0, and
|
||||
* @discordjs/opus 0.10.0 has none for Node 24 (ABI 137) - so a user on either
|
||||
* of those majors lands in the source-build fallback below and is told to
|
||||
* install Python and a C++ toolchain. Switching Node major is the far cheaper
|
||||
* fix, and nothing else in this output points at it. See issue #152.
|
||||
* @discordjs/opus 0.10.0 has no build for Node 24 (ABI 137), so a user on that
|
||||
* major lands in the source-build fallback below and is told to install Python
|
||||
* and a C++ toolchain. Switching Node major is the far cheaper fix, and nothing
|
||||
* else in this output points at it. (better-sqlite3 dropping its Node 20 / ABI
|
||||
* 115 builds in 12.10.0 is why Node 20 is no longer accepted at all.)
|
||||
* See issue #152.
|
||||
*/
|
||||
function explainMissingPrebuild(name, version, err) {
|
||||
if (!/HTTP 404/.test(err.message)) return;
|
||||
@@ -694,10 +695,9 @@ try {
|
||||
// that same loop. Run these concurrently and the first module to fall back to
|
||||
// a source build kills every download still in flight — the connection is
|
||||
// healthy, the timer just never got a chance to be reset. That is not a rare
|
||||
// race: npmmirror has no opus prebuild for ABI 137 (Node 24) and no
|
||||
// better-sqlite3 prebuild for ABI 115 (Node 20), so on both of the Node
|
||||
// versions this project supports, one module 404s within ~100ms and starts
|
||||
// building while ffmpeg's ~80MB download is still going. ffmpeg is optional,
|
||||
// race: @discordjs/opus 0.10.0 has no prebuild for ABI 137, so on Node 24 that
|
||||
// module 404s within ~100ms and starts building while ffmpeg's ~80MB download
|
||||
// is still going. ffmpeg is optional,
|
||||
// so the spurious failure used to be swallowed as a WARN and setup still
|
||||
// reported success — leaving the user with no ffmpeg and no working playback.
|
||||
// Nothing here benefits from overlap anyway: every probe is execFileSync.
|
||||
|
||||
Reference in new issue
Block a user