yarn报“文件名、目录名或卷标语法不正确”错误的解决方案

12,867 阅读3分钟

这个坑折腾了好久,为了避免之后再踩,在这里记录下。

1、问题描述

在运行yarn create vuepress时报错:文件名、目录名或卷标语法不正确

我一开始以为是 vuepress 的问题,后来上网看文章发现 vue、umi 等也会出现这个问题,所以这个应该就是 yarn 的问题。

2、踩坑过程

根据 Command 的提示,去到指定目录(我的是'D:\02-install\node.js\node_global\bin')下,找到文件 create-vuepress.cmd,其中内容如下:

@"%~dp0\C:\Users\18813\AppData\Local\Yarn\Data\global\node_modules\.bin\create-umi.cmd"   %*

大概就是这里的问题了,这个路径有问题,在windows系统下,盘符前哪里还需要什么“%~dp0” 符号,所以将 C: 盘符前的符号删了,如下:

@"C:\Users\18813\AppData\Local\Yarn\Data\global\node_modules\.bin\create-umi.cmd"   %*

保存后再运行 yarn create vuepress,还是报同样的错误:文件名、目录名或卷标语法不正确。再去查看文件create-vuepress.cmd 的内容,发现内容还是带有“%~dp0”,于是就报了同样的错了。

别慌,这个是因为修改了 create-vuepress.cmd 之后,运行yarn create vuepress之后会重新安装一次,然后就把改的文件覆盖了。

网上文章还有解决方案:在修改后,将 create-vuepress.cmd 所在文件夹路径(我的是‘D:\02-install\node.js\node_global\bin’)加入到系统环境变量path中,之后再运行对应命令即可。

大部分文章到这里都说已经解决了,也确实是解决了,但是我的依然报“文件名、目录名或卷标语法不正确”错误,已经奋战到深夜两点的我心好累。。。

3、终极解决方案

第二天晚上下班回来继续战斗,再查阅很多很多资料文章后发现,原来是因为我电脑的yarn bin目录和安装的模块在不同的硬盘分区里面导致的,而到上面那步就解决问题的应该是因为 yarn 默认安装在C盘(即运行缓存数据和安装目录都在C盘)了。

知道原因,那么问题就很好解决了:

首先查看 yarn bin 目录的位置:

yarn global bin

再查看 yarn 的全局安装位置:

yarn global dir

结果发现,yarn 的全局安装位置与 bin 目录的位置并不一致,于是去修改 yarn 的全局安装位置和缓存位置:

// 改变yarn全局安装的位置 
yarn config set global-folder "要安装yarn的磁盘路径"
// 例子
yarn config set global-folder "D:\02-install\yarn\global"

// 改变yarn缓存位置
yarn config cache-folder "要存放yarn缓存的磁盘路径"
// 例子
yarn config set cache-folder "D:\02-install\yarn\cache"

我这里的 yarn 是不放在 node 的文件夹里面的,当然这个不是重点,重点是要将yarn bin目录和安装的模块放在相同的硬盘分区里面

再次运行yarn create vuepress,终于成功运行:

至此,我的问题终于解决,希望我的解决方案对你有所帮助。