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

如何通过TYPE环境变量在EC2部署时排除安装@vendia/serverless-express依赖?

解决方法

方案1:用可选依赖+安装参数控制

把@vendia/serverless-express从dependencies移到optionalDependencies里,通过npm安装参数决定是否安装该包:

  • 修改package.json:
    {
      "dependencies": {
        // 你的其他生产依赖都放在这里
      },
      "optionalDependencies": {
        "@vendia/serverless-express": "^4.12.6" // 替换成你实际使用的版本
      }
    }
    
  • EC2部署时,执行以下命令即可跳过该包的安装:
    npm install --omit=optional
    
  • Lambda部署时直接运行npm install,会自动安装包括这个可选依赖在内的所有包。
  • 代码里要根据环境变量判断是否引入该包:
    let serverlessExpress;
    if (process.env.TYPE === 'lambda') {
      serverlessExpress = require('@vendia/serverless-express');
    }
    // 后续启动逻辑根据环境分支处理
    

方案2:写部署脚本做条件处理

不需要修改package.json,直接写一个简单的bash脚本,根据TYPE环境变量临时移除该包:

#!/bin/bash
if [ "$TYPE" = "ec2" ]; then
  # 临时卸载包,--no-save不会修改package.json
  npm uninstall --no-save @vendia/serverless-express
fi
npm install

部署时运行这个脚本即可:EC2环境下会先卸载目标包再执行安装,Lambda环境则直接全量安装所有依赖。

方案3:用npm脚本分环境安装

在package.json中添加两个对应不同环境的安装脚本:

{
  "scripts": {
    "install:lambda": "npm install",
    "install:ec2": "npm install && npm uninstall --no-save @vendia/serverless-express"
  }
}
  • Lambda部署时执行:npm run install:lambda
  • EC2部署时执行:npm run install:ec2

注意事项

  • 无论采用哪种方案,代码里必须做好环境判断,确保EC2环境下不会尝试引入@vendia/serverless-express包,避免运行时报错。
  • 如果使用CI/CD工具部署,可直接在CI流程中根据环境变量选择对应的安装命令,无需在服务器上处理脚本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:05:21