Windows 10 -> 'npx create-react-app myapp' 命令不起作用,因为文件路径中有空格用户名

Windows 10 -> 'npx create-react-app myapp' command does not work because of whitespace username in file path

我 运行 尝试通过 npx create-react-app appname 在我的 Windows 10 上安装 React 应用程序时遇到一些问题,收到以下错误消息:

Error: EPERM: operation not permitted, mkdir 'C:\Users\Daniel'
TypeError: Cannot read property 'loaded' of undefined
    at exit (C:\Program Files\nodejs\node_modules\npm\lib\utils\error-handler.js:98:27)
    at errorHandler (C:\Program Files\nodejs\node_modules\npm\lib\utils\error-handler.js:216:3)
    at C:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js:77:20
    at cb (C:\Program Files\nodejs\node_modules\npm\lib\npm.js:225:22)
    at C:\Program Files\nodejs\node_modules\npm\lib\npm.js:263:24
    at C:\Program Files\nodejs\node_modules\npm\lib\config\core.js:83:7
    at Array.forEach (<anonymous>)
    at C:\Program Files\nodejs\node_modules\npm\lib\config\core.js:82:13
    at f (C:\Program Files\nodejs\node_modules\npm\node_modules\once\once.js:25:25)
    at afterExtras (C:\Program Files\nodejs\node_modules\npm\lib\config\core.js:173:20)
C:\Program Files\nodejs\node_modules\npm\lib\utils\error-handler.js:98
  var doExit = npm.config.loaded ? npm.config.get('_exit') : true
                          ^

TypeError: Cannot read property 'loaded' of undefined
    at exit (C:\Program Files\nodejs\node_modules\npm\lib\utils\error-handler.js:98:27)
    at process.errorHandler (C:\Program Files\nodejs\node_modules\npm\lib\utils\error-handler.js:216:3)
    at process.emit (events.js:198:13)
    at process._fatalException (internal/bootstrap/node.js:496:27)
Install for create-react-app@latest failed with code 7

解决方法:

我开始研究并最终发现,如果您的 Windows 用户名中包含空格,则会出现此问题,例如"C:\Users\Firstname Lastname\AppData\Roaming\npm-cache"

在围绕这个问题 运行 转了一圈并重新阅读了多个 GitHub 线程后,我终于找到了一个对我有用的补丁: 运行 npm config set cache "C:\Users\Firstname~1\AppData\Roaming\npm-cache" --global 从你的终端,它会用 ~1 替换空格和后面的所有内容,这似乎解决了问题

我找到这个解决方案的来源是 https://github.com/zkat/npx/issues/146#issuecomment-384019497

我在这里发表这条评论是为了让任何人免去处理大量循环链接 github 线程的苦差事。

解决方案

如果您想使用用户名 "C:\Users\Firstname Lastname\AppData\Roaming\npm-cache" 中包含 space 的当前路径 您可以将 space 之后的字符串替换为 "~1"

npm config set cache "C:\Users\Firstname~1\AppData\Roaming\npm-cache" --global

如果您仍然无法解决这个问题,可以试试这个:

I was able to fix this in Windows by creating a directory junction to my users folder that didn't have a space in it. You can run a command like this in an administrative powershell:

cmd /c mklink /J "C:\Users\myname" "C:\Users\My Name"

You can then use this junction as if it were your real user directory:

npm config set cache C:\Users\myname\AppData\Roaming\npm-cache

npm config set prefix C:\Users\myname\AppData\Roaming\npm

(the above should update your user .npmrc file)

Source

这是我解决这个问题的方法:

  1. %APPDATA%
  2. 中删除 npm 文件夹
  3. prefixcache 都设置为不带空格的路径。 请注意,使用用户文件夹以外的 prefixcache 路径可能会使您的系统面临安全风险。
    npm config set prefix F:\PathWithoutSpace\
    npm config set prefix F:\PathWithoutSpace\ --global
    npm config set cache F:\PathWithoutSpace\cache
    npm config set cache F:\PathWithoutSpace\cache --global
  1. 重新安装 yarncreat-react-app
  2. 等软件包
  3. F:\PathWithoutSpace\ 添加到您的用户路径环境变量,它已经包含 %APPDATA%\npm 的扩展版本,将不再需要它。

我认为在用户安装 NodeJS 时将这些问题通知用户是值得的。

我确实将节点版本更新到 16.13.2,这解决了问题。

更改文件夹名称中没有空格的 NPM 缓存路径。在我的例子中,我在 C 驱动器的根目录中使用了一个文件夹。

npm config set cache C:\tmp\nodejs\npm-cache --global