如何在NPM脚本中实现跨平台创建文件夹的通用命令
NPM脚本跨平台创建目录的通用实现方案
原兼容命令在Windows触发访问被拒绝报错,核心原因是Windows的cmd、PowerShell既不识别Unix风格的~主目录缩写,路径转义规则、环境变量读取逻辑也和Unix shell不统一,硬写双命令兜底很容易出现路径解析错误,把目录创建到无权限的系统路径下。
不需要写操作系统专属判断逻辑的通用方案有两类,全平台适配无兼容问题:
方案1:零第三方依赖,基于Node原生能力实现
NPM脚本可直接调用Node执行行内代码,借助Node内置模块处理路径和文件操作,天然跨平台,不需要额外安装包,脚本中直接写入如下命令即可:
node -e "const fs = require('fs'); const path = require('path'); const home = require('os').homedir(); fs.mkdirSync(path.join(home, 'bla'), { recursive: true })"
os.homedir()会自动识别Windows、macOS、Linux的用户主目录路径,无需手动拼接环境变量path.join()自动适配不同系统的路径分隔符,不需要手动处理斜杠转义问题recursive: true参数支持递归创建多级目录,目标目录已存在时不会抛出错误,容错性优于原生shell的mkdir命令
方案2:借助跨平台工具包简化命令
如果不想写长串行内Node代码,可以安装专门的跨平台命令兼容包,写法和Unix原生命令几乎无差异:
- 轻量专用工具
mkdirp:安装为开发依赖后,直接在脚本中写mkdirp ~/bla即可,工具会自动处理不同系统的路径解析、目录创建逻辑 - 通用跨平台命令集
shx:如果项目中还需要用到其他跨平台shell命令,可以选择该工具,脚本中写shx mkdir -p ~/bla即可,参数逻辑和Unix下的mkdir -p完全一致,支持递归创建目录、已存在目录不报错
注意:
cross-env类工具仅做环境变量注入,不处理路径解析和命令本身的跨平台兼容,无法解决mkdir的适配问题。
内容的提问来源于stack exchange,提问作者Tal Rofe
相关产品推荐
相关产品推荐

