Heroku Review App不缓存node_modules

Oro*_*vid 6 heroku node.js npm buildpack hadoop-yarn

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

yarn.lock文件与一起位于应用程序的根目录package.json

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

在审阅应用程序构建日志分析期间,我看到:

-----> Restoring cache
Loading 1 from cacheDirectories (package.json):
- .cache/yarn (not cached - skipping)
Run Code Online (Sandbox Code Playgroud)

...

-----> Installing dependencies
       Installing node modules (yarn.lock)
Run Code Online (Sandbox Code Playgroud)

...

-----> Caching build
       - node_modules
Run Code Online (Sandbox Code Playgroud)

好像这个问题在2016年12月20日被打开了:https : //github.com/heroku/heroku-buildpack-nodejs/issues/359

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

Olu*_*ule 0

\n

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

\n
\n\n

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

\n\n

为了演示这一点,请添加一个heroku-postbuildheroku-prebuild命令脚本来scripts键入package.json以显示部署正在运行的文件夹。

\n\n
"heroku-postbuild": "pwd"\n
Run Code Online (Sandbox Code Playgroud)\n\n

构建日志的部分输出

\n\n
"heroku-postbuild": "pwd"\n
Run Code Online (Sandbox Code Playgroud)\n\n

纱线部署的一些问题在构建包的更高版本中得到解决。我建议使用最新的构建包,目前是v165

\n\n

在 v165 中,缓存是从纱线缓存依赖项的临时文件夹复制到为cacheDirectorieskey in配置的package.json

\n\n

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

\n\n

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

\n\n
remote:        $ echo \'postbuild\'; pwd\nremote:        postbuild\nremote:        /tmp/build_260cb9d4ad95c7671332f8a404117b59\nremote:        Done in 0.10s.\n
Run Code Online (Sandbox Code Playgroud)\n\n

features文件中写入

\n\n
cache-native-yarn-cache=true\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
remote:\nremote: -----> Restoring cache\nremote:        Loading 1 from cacheDirectories (package.json):\nremote:        - .cache/yarn\n
Run Code Online (Sandbox Code Playgroud)\n