1.问题描述
新建空目录
umi-app,然后使用命令yarn create @umijs/umi-app或者不新建目录umi-app直接使用命令yarn create umi umi-app都会出现下面的错误提示。
λ yarn create @umijs/umi-app
yarn create v1.22.4
[1/4] Resolving packages...
[2/4] Fetching packages...
info fsevents@2.1.3: The platform "win32" is incompatible with this module.
info "fsevents@2.1.3" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
warning "create-umi > sylvanas > @umijs/fabric > @typescript-eslint/eslint-plugin@1.13.0" has incorrect peer dependency "@typescript-eslint/parser@^1.9.0".
warning "create-umi > sylvanas > @umijs/fabric > eslint-config-airbnb@17.1.1" has incorrect peer dependency "eslint-plugin-react@^7.14.2".
warning "@umijs/create-umi-app > @umijs/utils > @babel/register@7.10.5" has unmet peer dependency "@babel/core@^7.0.0-0".
[4/4] Building fresh packages...
success Installed "@umijs/create-umi-app@3.2.18" with binaries:
- create-umi-app
文件名、目录名或卷标语法不正确。
error Command failed.
Exit code: 1
Command: M:\nodejs\node_global\bin\create-umi-app
Arguments:
Directory: L:\workspace\ReactProjects\umi-app
Output:
info Visit https://yarnpkg.com/en/docs/cli/create for documentation about this command.
λ yarn create umi umi-app
yarn create v1.22.4
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
warning "create-umi > sylvanas > @umijs/fabric > @typescript-eslint/eslint-plugin@1.13.0" has incorrect peer dependency "@typescript-eslint/parser@^1.9.0".
warning "create-umi > sylvanas > @umijs/fabric > eslint-config-airbnb@17.1.1" has incorrect peer dependency "eslint-plugin-react@^7.14.2".
[4/4] Building fresh packages...
success Installed "create-umi@0.24.1" with binaries:
- create-umi
文件名、目录名或卷标语法不正确。
error Command failed.
Exit code: 1
Command: M:\nodejs\node_global\bin\create-umi
Arguments:
Directory: L:\workspace\ReactProjects\umi-app
Output:
info Visit https://yarnpkg.com/en/docs/cli/create for documentation about this command.
2.问题分析
仔细看报错信息,回想自己当时安装yarn时,使用的是
npm install -g yarn这种方式安装的,且安装后没有修改yarn的全局模块bin文件目录,那么yarn全局安装模块后bin文件位置就指向npm的设置的全局模块安装目录的bin文件目录里,在报错信息中可以看到Command: M:\nodejs\node_global\bin\create-umi,然后查看create-umi.cmd文件发现代码@"%~dp0\C:\Users\love2\AppData\Local\Yarn\Data\global\node_modules\.bin\create-umi.cmd" %*路径指向了yarn默认的全局模块安装目录,此时再次查看yarn默认的bin目录下create-umi.cmd文件代码发现node "%~dp0\..\create-umi\cli.js" %*,然而发现在C:\Users\love2\AppData\Local\Yarn\global\node_modules\目录下没有create-umi文件夹,所以会报“文件名、目录名或卷标语法不正确”错误, 综上需要修改yarn的默认的bin文件目录,同时为了节省C盘的空间,把默认的全局模块安装目录和缓存目录也修改到其他盘下。
3.解决方案
- 修改前的目录
# 全局模块安装目录
λ yarn global dir
C:\Users\love2\AppData\Local\Yarn\Data\global
# 全局缓存目录
λ yarn cache dir
C:\Users\love2\AppData\Local\Yarn\Cache\v6
# 全局模块bin文件目录
λ yarn global bin
M:\nodejs\node_global\bin
- 修改后的目录
# 设置全局模块安装目录 属性名: global-folder
λ yarn config set global-folder "M:\nodejs\yarn_global"
yarn config v1.22.4
success Set "global-folder" to "M:\\nodejs\\yarn_global".
Done in 0.06s.
# 设置全局缓存目录 属性名: cache-folder
λ yarn config set cache-folder "M:\nodejs\yarn_cache"
yarn config v1.22.4
success Set "cache-folder" to "M:\\nodejs\\yarn_cache".
Done in 0.06s.
# 设置全局模块bin文件目录(测试没有,不支持)
λ yarn config set prefix M:\nodejs\yarn_global\node_modules\.bin
yarn config v1.22.4
success Set "prefix" to "M:\\nodejs\\yarn_global\\node_modules\\.bin".
Done in 0.06s.
注意:yarn config set prefix 发现这样设置没有用,还在cmd下找不到命令,
在执行yarn config list 命令后看到输出的信息中没有 prefix 属性,
因此需要在系统环境变量中path增加 M:\nodejs\yarn_global\node_modules\.bin