如何通过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
相关产品推荐
相关产品推荐

