Grunt升级至1.3.0后执行报错 无法创建目录ERR_INVALID_ARG_VALUE
报错根因
该错误由Grunt 1.3.0版本的文件操作逻辑变更触发:
- Grunt 1.0.4版本会自动过滤mkdir相关配置中值为
null的mode参数,不会将其透传给Node.js原生fs.mkdir方法 - Grunt 1.3.0移除了该参数过滤逻辑,会直接将配置中的
mode: null传给原生方法,而Node.js 12及以上版本收紧了fs.mkdir的参数校验规则,null不属于mode参数的合法取值,因此抛出ERR_INVALID_ARG_VALUE错误。
修复方案
按优先级从高到低可选以下方案:
- 直接修改Gruntfile配置
定位到Gruntfile.js中mkdir任务的配置段,删除所有mode: null配置项,或显式传入合法的八进制目录权限值即可,参考修改示例:
修改完成后重新执行grunt命令即可正常创建目录。// 修改前的问题配置 mkdir: { doc: { options: { mode: null, create: ["./build/documentation"] } } } // 修复后:移除mode字段,使用默认权限 mkdir: { doc: { options: { create: ["./build/documentation"] } } } // 修复后:显式指定权限(按需选用) mkdir: { doc: { options: { mode: 0o755, create: ["./build/documentation"] } } } - 调整依赖版本
如果使用第三方grunt-mkdir插件触发该问题,可先升级插件到最新版本;若最新版本仍未修复该兼容问题,可临时将Grunt版本锁定为1.0.4,在package.json中修改依赖配置后重装依赖即可:{ "devDependencies": { "grunt": "1.0.4" } } - 修复自定义任务逻辑
如果是自行编写的Grunt自定义任务中调用grunt.file.mkdir方法触发报错,检查传参逻辑,不要给mode参数传null,省略该参数时Node会默认使用合理的权限创建目录,无需显式传空值。
内容的提问来源于stack exchange,提问作者Subburaj
相关产品推荐
相关产品推荐

