目录

pub 故障排除

发布包时出现“403”错误

#

运行 pub publish 时收到以下错误

HTTP error 403: Forbidden
...
You aren't an uploader for package '<foo>'

如果您的某个帐户被授予发布包的权限,但 pub 客户端使用另一个帐户注册您,则可能会发生此问题。

您可以通过删除 pub 凭据文件来重置 pub 的身份验证过程

Linux

#

如果定义了 $XDG_CONFIG_HOME

$ rm $XDG_CONFIG_HOME/dart/pub-credentials.json

否则

$ rm $HOME/.config/dart/pub-credentials.json

macOS

#
$ rm $HOME/Library/Application Support/dart/pub-credentials.json

Windows

#

如果您使用的是命令提示符

cmd
$ del "%APPDATA%\dart\pub-credentials.json"

如果您使用的是 PowerShell

$ Remove-Item -Path "%APPDATA%\dart\pub-credentials.json"

发布包时出现“UnauthorizedAccess”错误

#

运行 pub publish 时收到以下错误

UnauthorizedAccess: Unauthorized user: <username> is not allowed to upload versions to package '<foo>'.

如果您不在被授权发布包新版本的人员列表中,您将看到此消息。请参阅 上传者

Pub 构建因 HttpException 错误而失败

#

运行 pub build 时收到类似于以下内容的 HttpException 错误

Pub build failed, [1] IsolateSpawnException: 'HttpException: Connection closed while receiving data,
...
library handler failed
...

这可能是由于某些防病毒软件(例如 AVG 2013 Internet 安全套件)导致的。查看您的安全套件的手册,了解如何临时禁用此功能。例如,请参阅 如何禁用 AVG 组件

从公司防火墙后进行 pub get 失败

#

从命令行,pub 会遵循 http_proxyhttps_proxy 环境变量。您可以按如下方式设置代理服务器环境变量。

在 Linux/macOS 上

$ export https_proxy=hostname:port

在 Windows 命令提示符上

cmd
$ set https_proxy=hostname:port

在 Windows PowerShell 上

$ $Env:https_proxy="hostname:port"

如果代理需要凭据,您可以按如下方式设置它们。

在 Linux/macOS 上

$ export https_proxy=username:password@hostname:port

在 Windows 命令提示符上

cmd
$ set https_proxy=username:password@hostname:port

在 Windows PowerShell 上

$ $Env:https_proxy="username:password@hostname:port"

登录后无法访问本地主机

#

当您在容器中或通过 SSH 会话运行 dart pub publish 时,dart pub 正在侦听的 localhost 可能与您的浏览器中可访问的 localhost 不同。虽然您可以使用浏览器登录,但浏览器随后会抱怨 https://127.0.0.1:<port>?code=... 无法访问。

尝试此解决方法,它使用命令行完成登录

  1. 在终端窗口中,运行 dart pub publish

  2. 在出现的浏览器窗口中,登录。
    浏览器被重定向到一个新的本地主机 URL (https://127.0.0.1:<port>?code=...) 但抱怨该 URL 无法访问。

  3. 从浏览器复制新的本地主机 URL

  4. 在与调用 dart pub publish 的容器或主机相同的另一个终端窗口中,使用 curl 命令使用新的本地主机 URL 完成登录

    $ curl 'https://127.0.0.1:<port>?code=...'

尝试查找包时出现套接字错误

#

如果您没有互联网访问权限,您的 ISP 阻止了 pub.dev,或者安全软件阻止了 dart 的互联网访问,则可能会发生以下错误。

Got socket error trying to find package ... at https://pub.dev.
pub get failed (server unavailable) -- attempting retry 1 in 1 second...

检查您的互联网连接,并验证您是否没有阻止 dart 访问互联网的防火墙或其他安全软件。

卡巴斯基互联网安全的详细说明

当您从菜单栏关闭卡巴斯基互联网安全保护时,VPN 应用程序过滤器 sysextctrld 仍然在后台运行。此过滤器会导致无法连接到 pub.dev。要解决此问题,请将 https://pub.devhttps://pub.dartlang.org 都添加到信任区域

  1. 打开卡巴斯基互联网安全。
  2. 单击隐私图标。
  3. 阻止网站跟踪部分下,单击首选项按钮。
  4. 在顶部图标栏中,选择威胁
  5. 威胁下,单击信任区域
  6. 选择受信任的 Web 地址选项卡。
  7. 单击 + 按钮,并添加 URL https://pub.dev
  8. 单击确定
  9. https://pub.dartlang.org 重复前两个步骤