Cloudflare Pages构建Svelte应用时Node版本安装失败问题
核心报错原因
构建失败的直接原因是.nvmrc文件格式不符合Cloudflare Pages的读取规则:平台读取.nvmrc时仅识别纯版本号字符串,当前文件中写入的NODE_VERSION=12.18.0会被整体识别为版本号进行匹配,必然找不到对应版本。只要保留NODE_VERSION=前缀,无论修改成什么版本号都会触发同类报错。
另外12.18.0为2020年发布的老旧版本,不满足新版Svelte/SvelteKit的依赖运行要求,即使版本识别成功也会触发后续依赖安装、构建执行阶段的错误。
修复步骤
- 修改项目根目录的
.nvmrc文件,删除NODE_VERSION=前缀,仅保留纯版本号。推荐使用Node 18/20 LTS版本,文件内容直接填写18即可,平台会自动拉取18大版本的最新稳定版。 - 调整Cloudflare Pages项目环境变量:要么删除手动添加的
NODE_VERSION环境变量,要么将该变量值改为纯版本号格式,禁止带NODE_VERSION=前缀。注意:Cloudflare Pages中环境变量配置的Node版本优先级高于.nvmrc文件,两处配置需保持一致 - 核对构建参数:原生Svelte项目构建命令填
npm run build,输出目录填public;SvelteKit项目需提前安装@sveltejs/adapter-cloudflare依赖,修改svelte.config.js中的adapter配置为cloudflare适配器,构建输出目录填.svelte-kit/cloudflare。 - 将修改后的
.nvmrc提交推送到代码仓库,重新触发构建即可正常执行。
原始构建日志
22:58:31.466 Cloning repository...
22:58:32.245 From https://github.com/ehubbartt/ethanhub
22:58:32.245 * branch 7807b7d14bc466249b9955d9ef06431003cd53ac -> FETCH_HEAD
22:58:32.295 HEAD is now at 7807b7d sdfs
22:58:32.464 Success: Finished cloning repository files
22:58:33.142 Installing dependencies
22:58:33.155 Python version set to 2.7
22:58:35.570 Attempting node version 'NODE_VERSION=12.18.0' from .nvmrc
22:58:37.196 Version 'NODE_VERSION=12.18.0' not found - trynvm ls-remoteto browse available versions.
22:58:37.199 Failed to install node version 'NODE_VERSION=12.18.0'
22:58:37.204 Failed: build command exited with code: 1
22:58:38.110 Failed: an internal error occurred
内容的提问来源于stack exchange,提问作者Ethan Hubbartt

