清除 Nx 缓存
当使用 Nx 管理大型项目时,缓存目录可能会占用大量磁盘空间。本文将介绍如何有效管理和清理 Nx 缓存。
Nx 缓存的位置和用途
Nx 默认将缓存存放在 ./node_modules/.cache/nx/
目录中。这个缓存用于存储构建和测试等任务的运算结果,以提高后续执行的速度。但随着项目发展,缓存可能会增长到数 GB 大小。
推荐的清理方法
使用官方命令(推荐)
从 Nx 15 开始,官方提供了专门的清理命令:
bash
nx reset
这个命令会安全地清理 Nx 的缓存,同时保持缓存的完整性。
手动删除缓存目录
如果希望完全清除缓存,可以直接删除缓存文件夹:
bash
rm -rf ./node_modules/.cache/nx
或者使用跨平台的删除命令。
WARNING
手动删除缓存目录会造成所有缓存失效,可能导致后续构建和测试需要重新计算,增加执行时间。
替代方案:跳过缓存执行
在某些情况下,你可能不需要清除整个缓存,而是希望特定命令不使用缓存:
bash
# 跳过缓存执行构建
npx nx run build --skip-nx-cache
# 跳过缓存执行测试
npx nx run test --skip-nx-cache
高级配置选项
自定义缓存位置
如果担心缓存占用项目空间,可以将其配置到其他位置。在 nx.json
中添加:
json
{
"tasksRunnerOptions": {
"default": {
"options": {
"cacheDirectory": "/tmp/nx-cache"
}
}
}
}
自动化缓存清理脚本
如果希望定期自动清理缓存,可以创建自定义脚本:
javascript
const fs = require('fs');
const { execSync } = require('child_process');
const cachePath = 'node_modules/.cache/nx';
const maxCacheSizeMB = 2048;
if (fs.existsSync(cachePath)) {
// 检查缓存大小
const size = getDirectorySize(cachePath);
const mbSize = size / 1024 / 1024;
console.log(`NX 缓存大小: ${mbSize.toFixed(2)} MB`);
if (mbSize > maxCacheSizeMB) {
console.log('清理 NX 缓存...');
execSync('nx reset', { stdio: 'inherit' });
}
}
function getDirectorySize(path) {
// 实现获取目录大小的逻辑
}
注意事项
- 区分缓存类型:
nx clear-cache
命令用于清理 Jest 测试缓存,而非 Nx 计算缓存 - 性能影响:清除缓存后首次运行命令可能会变慢
- 共享缓存:在 CI/CD 环境中考虑使用分布式缓存以提高效率
最佳实践
- 定期使用
nx reset
管理缓存大小 - 在 CI 环境中配置适当的缓存策略
- 对于大型团队,考虑使用 Nx Cloud 进行分布式缓存
通过合理管理 Nx 缓存,可以在保持构建速度的同时,有效控制磁盘空间的使用。