加速Rails应用Docker构建中的yarn install步骤
解决Rails Docker构建中yarn install耗时过长的问题
一、必须启用Docker构建缓存优化node_modules安装
这是最直接有效的提速手段,利用Docker分层缓存特性,仅当依赖配置变更时才重新执行yarn install。调整Dockerfile步骤顺序如下:
# 先复制依赖配置文件(仅当package.json/yarn.lock修改时,此层缓存才会失效) COPY package.json yarn.lock ./ # 锁定依赖版本避免重复解析,空devDependencies场景下用--production减少安装内容 RUN yarn install --production --frozen-lockfile # 再复制项目其余代码 COPY . . # 执行资产预编译 RUN rake assets:precompile
二、精简依赖,移除不必要的包
你明确不使用webpacker,当前依赖中的@rails/webpacker和rails-erb-loader属于冗余项,可通过调整资产处理方式完全移除:
- 修改package.json:删除
@rails/webpacker和rails-erb-loader,若改用Rails原生资产管道,甚至可以完全移除@rails/actiontext和trix的npm依赖。 - 用Rails Asset Pipeline处理actiontext和trix:
- 在
app/assets/javascripts/application.js中添加://= require trix //= require actiontext - 在
app/assets/stylesheets/application.css中添加:*= require trix *= require actiontext - 动态ERB资产直接使用Rails原生
.erb.js文件即可,无需额外loader,Rails会自动解析ERB模板。
- 在
此方案可彻底避免npm安装200MB依赖包,从根源解决yarn install耗时问题。
三、其他辅助提速技巧
若暂时无法移除npm依赖,可尝试以下方法进一步缩短耗时:
- 挂载yarn全局缓存:避免每次构建重复下载包:
RUN --mount=type=cache,target=/usr/local/share/.cache/yarn/v6 \ yarn install --production --frozen-lockfile - 更换npm镜像源:使用国内镜像加快包下载速度:
RUN yarn config set registry https://registry.npmmirror.com
内容的提问来源于stack exchange,提问作者Nick M
相关产品推荐
相关产品推荐

