使用npm rimraf删除多目录时遇‘Illegal characters in path’错误求助
解决rimraf执行
rimraf **/lib/**报错"Illegal characters in path"的问题 问题详情
使用npm的rimraf工具批量删除目录时触发错误,报错提示:
Error: Illegal characters in path
执行的命令为:rimraf **/lib/**
完整报错堆栈信息:
> ecommerce.ui@0.7.2 clean-libs > rimraf **/lib/** Error: Illegal characters in path. at pathArg (C:\Users\SUDARANGA\AppData\Roaming\nvm\v18.9.0\node_modules\rimraf\dist\cjs\src\path-arg.js:45:33) at C:\Users\SUDARANGA\AppData\Roaming\nvm\v18.9.0\node_modules\rimraf\dist\cjs\src\index.js:34:66 at Array.map (<anonymous>) at C:\Users\SUDARANGA\AppData\Roaming\nvm\v18.9.0\node_modules\rimraf\dist\cjs\src\index.js:34:28 at main (C:\Users\SUDARANGA\AppData\Roaming\nvm\v18.9.0\node_modules\rimraf\dist\cjs\src\bin.js:134:11) at Object.<anonymous> (C:\Users\SUDARANGA\AppData\Roaming\nvm\v18.9.0\node_modules\rimraf\dist\cjs\src\bin.js:143:5) at Module._compile (node:internal/modules/cjs/loader:1119:14) at Module._extensions..js (node:internal/modules/cjs/loader:1173:10) at Module.load (node:internal/modules/cjs/loader:997:32) at Module._load (node:internal/modules/cjs/loader:838:12) { path: 'C:\\source\\Ecommerce.UI\\**\\lib\\**', code: 'EINVAL' }
问题根源
这是Windows环境下的典型问题:
- Windows的CMD、PowerShell默认不识别
**这类glob通配符,会直接把**当作路径的一部分传递给rimraf。 - rimraf v4及以上版本移除了内置的glob解析功能,不会自动处理
**通配符,导致系统判定带**的路径包含非法字符。
解决办法
1. 降级到rimraf v3版本
v3版本自带glob解析能力,无需修改命令即可直接使用:
npm install rimraf@^3 --save-dev
重新执行rimraf **/lib/**即可完成删除操作。
2. 给rimraf v4+搭配glob包
先安装glob依赖:
npm install glob --save-dev
修改package.json中的脚本,通过Node.js解析glob路径后再执行删除:
{ "scripts": { "clean-libs": "node -e \"require('glob').sync('**/lib/**').forEach(f => require('rimraf').sync(f))\"" } }
或者直接用命令行执行:
npx glob "**/lib/**" --exec "rimraf {}"
3. 用PowerShell手动解析通配符
如果使用PowerShell,先让它解析出所有目标目录,再传递给rimraf:
rimraf (Get-ChildItem **/lib/** -Directory).FullName
4. 切换到WSL环境
如果条件允许,使用Windows子系统Linux(WSL)执行原命令,Linux的Shell原生支持glob通配符,不会出现该问题。
内容的提问来源于stack exchange,提问作者Sanke
相关产品推荐
相关产品推荐

