You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Alpine Linux的Elixir项目因Node OpenSSL依赖构建失败求助

解决方案:Node.js OpenSSL 遗留提供者配置问题

排查与可行方案

1. 确保环境变量在CodeBuild构建上下文生效

之前的Dockerfile ENV设置可能未被CodeBuild的构建流程继承,直接在buildspec.yml的构建阶段注入环境变量,确保Node进程启动时能读取到:

phases:
  install:
    commands:
      - export NODE_OPTIONS="--openssl-legacy-provider"
      - echo 'export NODE_OPTIONS="--openssl-legacy-provider"' >> ~/.bashrc
      - source ~/.bashrc
  build:
    commands:
      # 执行你的项目构建命令,比如mix phx.digest或npm run deploy
      - mix phx.digest

2. 修正Dockerfile中环境变量的作用范围

RUN export NODE_OPTIONS=...仅在当前RUN命令的shell会话中生效,后续命令无法继承。必须用ENV全局设置,且放在Node相关操作之前:

# 安装Node后、执行npm命令前设置全局环境变量
ENV NODE_OPTIONS="--openssl-legacy-provider"

# 执行依赖安装与构建
RUN npm install
RUN npm run deploy

3. 锁定Node.js版本到16.x(兼容OpenSSL 1.1)

Alpine 3.16软件源中的Node.js 16.x默认使用OpenSSL 1.1,不会触发该兼容性错误。在Dockerfile中指定安装版本:

RUN apk add --no-cache nodejs=16.20.2-r0 npm=8.19.4-r0

或在CodeBuild中用nvm切换版本:

nvm install 16
nvm use 16

4. 直接在webpack配置中强制启用遗留提供者

如果package.json脚本修改无效,在webpack.config.js中通过配置传递参数:

module.exports = {
  // 其他配置项
  plugins: [
    // 添加插件或直接在启动时注入参数
  ]
}

同时确认执行构建命令时,没有通过NODE_OPTIONS=...前缀覆盖全局环境变量。

验证步骤

  • 在CodeBuild日志中检查构建阶段是否输出NODE_OPTIONS=--openssl-legacy-provider
  • 执行node --print process.env.NODE_OPTIONS确认环境变量生效
  • 用node -v检查版本:17+版本必须启用遗留提供者,16-版本无需额外设置

内容的提问来源于stack exchange,提问作者William Ross

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 08:23:14