rimraf 常用命令
rimraf 是一个跨平台的文件删除工具,等同于 Unix 的 rm -rf,解决 Windows 下删除文件路径过长或被占用的问题。
💡 Node.js 16+ 内置了
fs.rm(dir, { recursive: true }),可以替代 rimraf:bash# 在 package.json 中使用内置方案(无需安装 rimraf) node -e "fs.rmSync('dist', { recursive: true, force: true })"如果项目 Node.js 版本 >= 16 且只需清理构建产物,可考虑不引入 rimraf。
为什么需要 rimraf
- 跨平台兼容:Windows 的 CMD 不支持
rm -rf,PowerShell 虽有别名但语法不同 - 路径过长:Windows 下
node_modules嵌套过深会导致删除失败 - 统一命令:团队成员使用不同系统时,
package.json中的脚本无需区分平台
安装
bash
# 全局安装
npm install -g rimraf
# 安装为开发依赖
npm install -D rimraf使用方式
命令行使用
bash
# 删除指定目录
rimraf node_modules
# 删除多个目录
rimraf dist build coverage
# 使用通配符
rimraf *.log在 package.json 中使用
json
{
"scripts": {
"clean": "rimraf dist",
"clean:all": "rimraf dist node_modules .cache",
"prebuild": "rimraf dist",
"build": "vite build"
}
}常见使用场景
清理构建产物
json
{
"scripts": {
"clean": "rimraf dist",
"prebuild": "rimraf dist",
"build": "vite build"
}
}清理缓存
json
{
"scripts": {
"clean:cache": "rimraf node_modules/.cache .vitepress/cache",
"clean:all": "rimraf dist node_modules .cache"
}
}重装依赖
json
{
"scripts": {
"reinstall": "rimraf node_modules yarn.lock && yarn install"
}
}清理测试覆盖率
json
{
"scripts": {
"clean:coverage": "rimraf coverage",
"test:coverage": "rimraf coverage && jest --coverage"
}
}rimraf vs rm -rf
| 特性 | rimraf | rm -rf |
|---|---|---|
| 跨平台 | ✅ | ❌ 仅 macOS/Linux |
| Windows CMD | ✅ | ❌ |
| Windows PowerShell | ✅ | ⚠️ 需要 Remove-Item -Recurse |
| 路径过长问题 | ✅ 自动处理 | ❌ |
| package.json 脚本 | ✅ 统一写法 | ❌ 需要区分平台 |
常见问题
删除 node_modules 很慢
bash
# rimraf 会处理路径过长的问题,但仍然可能较慢
# 可以尝试先关闭编辑器和终端,再执行删除
rimraf node_modules权限不足
bash
# Windows: 以管理员身份运行终端
# macOS/Linux: 先关闭占用文件的进程(编辑器、终端等),再执行删除
rimraf node_modules⚠️ 不推荐使用
sudo rimraf,可能导致文件权限混乱,影响后续 npm install 等操作。应先关闭占用文件的程序,或检查文件权限。