You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows环境下package.json脚本中mkdir -p命令无法执行的问题

解决Windows环境下npm脚本执行mkdir -p报错的问题

这个问题我之前在项目里也碰到过,你操作本身没出错,核心原因是npm在Windows环境下默认会调用系统自带的cmd.exe来执行脚本命令,而不是你当前打开的git-bash或Cygwin终端。

为什么会出现这个矛盾?

你在git-bash里手动输入mkdir -p distrib/images能正常运行,是因为此时是bash环境在解析命令,它支持-p参数递归创建目录;但npm执行脚本时,并不会自动切换到bash环境,而是用Windows原生的cmd来处理,而cmd的mkdir命令不支持-p参数(它的递归参数是/p,但用法和bash的-p也不完全一致),所以就会报「命令语法错误」。

几个可行的解决方案:

1. 强制npm用bash执行脚本

在脚本命令前加上bash -c,让npm调用bash来解析命令,这样就能正常识别-p参数了:

"scripts": {
  "create-images-dir": "bash -c 'mkdir -p distrib/images'"
}

2. 使用跨平台的目录创建工具(推荐)

安装专门的跨平台包mkdirp,它能在所有系统下统一处理递归创建目录的需求,不用考虑环境差异:
首先安装依赖:

npm install mkdirp --save-dev

然后修改脚本:

"scripts": {
  "create-images-dir": "mkdirp distrib/images"
}

3. 用Windows原生命令写法(不推荐,灵活性差)

如果不想额外安装包,可以用cmd的语法来实现递归创建,但写法比较繁琐,而且只能针对固定路径:

"scripts": {
  "create-images-dir": "if not exist distrib mkdir distrib && if not exist distrib\\images mkdir distrib\\images"
}

总结

最稳妥的方式是用第二种跨平台工具的方案,能避免不同系统环境下的命令差异问题;如果只想依赖bash环境,第一种方案也能解决你的问题。

内容的提问来源于stack exchange,提问作者Vasiliy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:59:44