首页 > 解决方案 > Heroku Review App 不缓存 node_modules

问题描述

我使用以下 buildpack:heroku-buildpack-nodejs 默认情况下,它应该缓存和恢复node_modules

yarn.lock文件位于应用程序的根目录以及package.json.

我也添加"cacheDirectories": [".cache/yarn"]package.json

在 review-app 构建日志分析期间,我看到:

-----> Restoring cache
Loading 1 from cacheDirectories (package.json):
- .cache/yarn (not cached - skipping)

...

-----> Installing dependencies
       Installing node modules (yarn.lock)

...

-----> Caching build
       - node_modules

似乎这个问题是在 2016 年 12 月 20 日打开的: https ://github.com/heroku/heroku-buildpack-nodejs/issues/359

如何在不安装每个构建的依赖项的情况下实现缓存机制?

标签: node.jsherokunpmyarnpkgbuildpack

解决方案


Heroku NodeJS构建包的 v83 不支持使用 yarn 安装依赖项。这是在v93中添加的。

Buildpack v93 并非没有自己的问题。由于它对相对于as的纱线缓存路径进行硬编码。这会带来一个问题,因为它是一个临时目录,并且不能依赖于在下一次部署中存在。$build_dir$build_dir/.cache/yarn/v2$build_dir

为了演示这一点,为key in添加一个heroku-postbuildheroku-prebuild命令脚本以显示正在运行的文件夹部署。scriptspackage.json

"heroku-postbuild": "pwd"

构建日志的部分输出

remote:        $ echo 'postbuild'; pwd
remote:        postbuild
remote:        /tmp/build_260cb9d4ad95c7671332f8a404117b59
remote:        Done in 0.10s.

后续版本的 buildpack 解决了有关 yarn 部署的一些问题。我建议使用当前为v165的最新构建包

在 v165 中,缓存从yarn 缓存依赖项的临时文件夹复制cacheDirectories到为key in配置的文件夹package.json

目前,此功能位于功能标志后面。

为了为您的部署启用它,请features在您的项目中创建一个文件。

.
├── README.md
├── features
├── package.json
└── yarn.lock

features文件中,写

cache-native-yarn-cache=true

重新运行您的部署应该会产生类似于以下内容的日志:

remote:
remote: -----> Restoring cache
remote:        Loading 1 from cacheDirectories (package.json):
remote:        - .cache/yarn

推荐阅读