升级Travis至Node.js 20部署Firebase Functions遇fsevents平台不兼容问题
解决Travis升级Node.js 20后部署Firebase Functions的fsevents平台兼容错误
升级Travis环境到Node.js 20后,部署Firebase Functions时触发以下平台兼容错误:
Build failed: npm ERR! code EBADPLATFORM npm ERR! notsup Unsupported platform for fsevents@2.3.2: wanted {"os":"darwin"} (current: {"os":"linux"}) npm ERR! notsup Valid os: darwin npm ERR! notsup Actual os: linux
当前相关配置:
- .travis.yml
... install: bash $HOME/build/ChangEdApps/changed-javascript/backend/shellScripts/travis-script.sh language: node_js node_js: - '20' dist: jammy
- Travis脚本片段
npm i --prefix $PROJECT_DIR_PWD/web-apps/changed-admin-app/functions -f && npm i request firebase-functions --prefix $PROJECT_DIR_PWD/web-apps/changed-admin-app/functions &&
已尝试标记fsevents为可选依赖、使用--omit=optional、npm ci、删除package-lock.json等操作,但问题未解决。
方案1:调整npm安装命令,强制忽略平台差异
合并两次npm安装操作,并添加兼容参数:
npm install request firebase-functions --prefix $PROJECT_DIR_PWD/web-apps/changed-admin-app/functions --ignore-platform --omit=optional
--ignore-platform:跳过npm对平台兼容性的校验(npm 7+支持,Node.js 20对应npm 9完全兼容)--omit=optional:直接跳过所有可选依赖安装,包括仅支持macOS的fsevents
方案2:在Functions的package.json中声明平台规则
在web-apps/changed-admin-app/functions/package.json中添加以下配置,明确指定项目适配平台并标记fsevents为可选:
"os": ["linux"], "optionalDependencies": { "fsevents": "*" }
npm安装时会自动识别当前平台,跳过不兼容的可选依赖。
方案3:让Firebase跳过云端构建,直接使用本地依赖
Firebase默认会在云端重新安装依赖,容易触发平台不兼容问题。部署时添加--no-build参数,直接使用Travis环境中已安装的Linux兼容依赖:
firebase deploy --only functions --no-build
注意:使用前需确保Travis已完成依赖安装并处理好平台兼容。
方案4:清理Travis缓存,移除旧依赖残留
Travis缓存可能残留了旧环境的node_modules或package-lock.json,导致安装逻辑异常:
方式A:修改.travis.yml禁用npm缓存
cache: npm: false directories: - $HOME/.npm
方式B:在Travis脚本开头添加清理步骤
rm -rf $PROJECT_DIR_PWD/web-apps/changed-admin-app/functions/node_modules $PROJECT_DIR_PWD/web-apps/changed-admin-app/functions/package-lock.json
内容的提问来源于stack exchange,提问作者lando2319
相关产品推荐
相关产品推荐

