如何禁用Elastic Beanstalk Linux2 Node默认npm install步骤
问题解答
默认npm install的定义位置
AWS Elastic Beanstalk Amazon Linux 2 Node.js平台的默认npm install调用逻辑,存放在平台内置的部署hook路径下:
- 应用部署阶段:
/opt/elasticbeanstalk/hooks/appdeploy/pre/50npm.sh - 配置变更部署阶段:
/opt/elasticbeanstalk/hooks/configdeploy/pre/50npm.sh
这两个脚本是平台预置的,默认会在prebuild阶段的对应节点执行,不需要查找其他额外配置文件。
可直接落地的阻断方案
完全可以通过.platform/hooks/prebuild/下的自定义脚本实现阻断,不需要改动平台其他底层配置,步骤如下:
- 先给所有自定义hook脚本加可执行权限,本地提交代码前执行:
没有可执行权限的脚本会被EB直接跳过,这是自定义脚本不生效的最常见原因。chmod +x .platform/hooks/prebuild/*.sh - 在
.platform/hooks/prebuild/目录下新建优先级最高的阻断脚本,命名为00-block-npm-install.sh,内容如下:#!/bin/bash set -e # 覆写应用部署阶段的npm安装脚本为空逻辑 cat > /opt/elasticbeanstalk/hooks/appdeploy/pre/50npm.sh << EOF #!/bin/bash echo "Skipped default npm install, use yarn instead" exit 0 EOF chmod +x /opt/elasticbeanstalk/hooks/appdeploy/pre/50npm.sh # 覆写配置变更阶段的npm安装脚本为空逻辑 if [ -f /opt/elasticbeanstalk/hooks/configdeploy/pre/50npm.sh ]; then cat > /opt/elasticbeanstalk/hooks/configdeploy/pre/50npm.sh << EOF #!/bin/bash echo "Skipped default npm install for config deploy, use yarn instead" exit 0 EOF chmod +x /opt/elasticbeanstalk/hooks/configdeploy/pre/50npm.sh fi - 同目录下新建
01-yarn-install.sh编写yarn安装逻辑,注意EB在prebuild阶段的应用代码存放在/var/app/staging目录,不要直接用相对路径执行命令:#!/bin/bash set -e # 若环境未预装yarn,先全局安装 npm install -g yarn # 切换到staging目录执行依赖安装 cd /var/app/staging # 建议加--frozen-lockfile参数保证依赖版本和yarn.lock完全一致 yarn install --frozen-lockfile --production
注意事项
- 不要在代码仓库中提交
package-lock.json文件,否则部分平台版本会绕过覆写的脚本,强制执行npm ci,如果之前提交过请删除并加入.gitignore - 脚本命名前面的数字序号决定执行顺序,数字越小越先执行,不要把阻断脚本的序号排到其他脚本后面,否则会出现先执行npm install再触发阻断逻辑的问题
- 如果项目需要执行build流程(比如前端打包、ts编译),记得把build命令改成yarn执行,放在yarn安装脚本里即可。
内容的提问来源于stack exchange,提问作者Alex von Brandenfels
相关产品推荐
相关产品推荐

