npm eas:术语“eas”不被识别为小程序、函数、脚本文件或可操作程序的名称- expo

uemypmqf  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(119)

在我错误地编辑了一些用户变量之前,开发版本的一切都很好。
则所有EAS命令以该错误结束:

eas : The term 'eas' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was 
included, verify that the path is correct and try again.
At line:1 char:1
+ eas login
+ ~~~
    + CategoryInfo          : ObjectNotFound: (eas:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

字符串
我试过npm install -g eas-clinpm uninstall -g eas
但没有成功

bjg7j2ky

bjg7j2ky1#

我在将这些路径添加到系统变量后修复了它
1_ C:\Users\YourPcName\AppData\Roaming\npm,我将它移到所有其他路径的顶部
2_ C:\Users\YourPcName\AppData\Roaming\npm\node_modules\eas-cli\bin

gmxoilav

gmxoilav2#

您的问题归结为如何修复PATH环境变量的持久定义,以便全局 * 安装npm install -gCLI可以再次仅通过 * 名称调用,例如您的情况中的eas
为此,请确保npm prefix -g输出的
目录路径**(通常为"$env:APPDATA\npm")是注册表中PATH环境变量的 * 用户级 * 定义的一部分。

  • 注意事项:您只需要添加 this one 目录-它是放置 * 所有 * 全局安装CLI的入口点(*.cmd.ps1文件以及Unix shell脚本)的地方。

自动化该过程:

$globalClisDir = npm prefix -g

# Make sure the directory is listed in the *persistent, user-level* definition
# of the PATH env. var. in the registry.
if (([Environment]::GetEnvironmentVariable('Path', 'User') -split ';' -eq $globalClisDir).Count -eq 0) { 
  # Important: Get the current definition in *unexpanded* form directly
  #            from the registry.
  $userPathRaw = 
    (Get-Item HKCU:\Environment).GetValue('Path', $null, 'DoNotExpandEnvironmentNames')
  # Update it with the directory appended.
  Set-ItemProperty HKCU:\Environment Path "$userPathRaw;$globalClisDir" 
}

字符串
注意事项:

  • 更新后的PATH值将在 * 未来 * 的PowerShell会话中生效,但您需要与Windows shell通信环境变量已更改:
  • 在最简单的形式中,强制重启所有explorer.exe窗口:
Stop-Process -Name explorer

  • 对于一个温和的方法,请参阅下面的链接答案。
  • 要为 * 当前 * 会话更新它,请运行:
$env:PATH+=";$(npm prefix -g)"

  • if语句的唯一目的是防止意外地多次添加目录。
  • This answer解释了为什么直接通过注册表更新Path(以及其他定义为REG_EXPAND_SZ注册表值的环境变量)非常重要,而 * 不 * 使用setx.exe[System.Environment]::SetEnvironmentVariable().NET API等实用程序。

[1]由于全局安装的npm包被放置在 * 用户特定的位置 *(其他用户通常无法访问),因此只修改用户级PATH定义是有意义的。

相关问题