假设您有一个带有模块联盟的monorepo,其中有5个不同的应用程序,您希望在单独的CI步骤中构建这些应用程序,并且在执行每个应用程序的构建之前,您需要拥有所有的node_module。npm-ci需要约1分钟,即整个ci额外需要5分钟,即使在
--prefer-offline
和.npm缓存。。。似乎安装的主要时间消费者是使用包锁定进行依赖性检查,而不是下载时间,.npm缓存实际上没有多大区别,可能只有15秒。
而不是缓存
$HOME/.npm
,我正在尝试缓存准备使用的node_modules文件夹。在monoreo中,您也需要在工作区中缓存未提升的node_module,但您可以通过
npm query .workspace | jq -r '.[].location'
,将它们全部压缩在一起,打开缓存后,只需将所有内容放回各自的子文件夹/工作区即可。
现在我的问题是,您还需要链接节点模块中的工作区,例如
node_modules/@my-company/some-lib
.
npm ci
它会自动执行此操作,但也会检查/安装外部依赖项。有没有办法绕过这个问题,让npm只做链接?
还有什么其他因素会使这种情况变得不稳定吗?请记住,我已经负责版本控制了。我不使用package-lock.json来使缓存无效,而是使用没有工作区版本的package-lack.json-checksum,所以只有外部安装的包才重要。
有其他人尝试过这种方法吗?