使用child_process.spawnSync解压文件时遭遇ENOENT错误求助
问题解决:spawnSync执行unzip抛出ENOENT错误
你的问题核心是**spawnSync的参数使用方式错误**:
spawnSync的第一个参数必须是单独的命令名(比如unzip),不能把命令和参数拼成一个完整字符串传入- 第二个参数才是该命令对应的所有参数组成的数组
你现在把unzip ${path}作为第一个参数,Node会尝试查找名为unzip /<...>/unzipFiles/test/zipp.zip的可执行文件——系统里根本不存在这个命令,所以抛出ENOENT错误。
修正后的代码
const { spawnSync } = require('child_process'); // 过滤空参数,避免给unzip传递无效的空字符串 const args = [path]; if (passwordArg) args.push(passwordArg); if (outputArg) args.push(outputArg); const result = spawnSync('unzip', args);
额外注意事项
- 如果文件路径包含空格,不需要手动加引号,
spawnSync会自动处理参数的空格转义,这比直接拼接字符串更安全 - 确保
unzip命令在Node进程的PATH环境变量中(你手动能执行说明没问题,但特殊环境比如Docker容器需要额外确认) - 空字符串参数会被
unzip判定为无效参数,所以一定要过滤passwordArg、outputArg这类可能为空的参数
内容的提问来源于stack exchange,提问作者Jake Jackson
相关产品推荐
相关产品推荐

