跳到主要內容

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 security suite。請查閱您的安全套件手冊,瞭解如何暫時停用此功能。例如,請參閱如何停用 AVG 元件

在公司防火牆後 Pub 獲取失敗

#

在命令列中,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"

登入後 localhost 無法訪問

#

當您在容器中或透過 SSH 會話執行 dart pub publish 時,dart pub 正在監聽的 localhost 可能與您的瀏覽器中可訪問的 localhost 不同。儘管您可以使用瀏覽器登入,但瀏覽器會抱怨 https://:<port>?code=... 無法訪問。

嘗試此解決方案,它使用命令列完成登入

  1. 在終端視窗中,執行 dart pub publish

  2. 在彈出的瀏覽器視窗中,登入。
    瀏覽器會重定向到一個新的 localhost URL (https://:<port>?code=...),但會抱怨該 URL 無法訪問。

  3. 從瀏覽器中複製新的 localhost URL

  4. 在與呼叫 dart pub publish 的容器或主機相同的另一個終端視窗中,使用 curl 命令,透過新的 localhost URL 完成登入

    curl 'https://:<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 訪問網際網路。

Kaspersky Internet Security 的詳細說明

當您從選單欄關閉 Kaspersky Internet Security 保護時,VPN 應用程式過濾器 sysextctrld 仍然在後臺執行。此過濾器會導致無法連線到 pub.dev。要解決此問題,請將 https://pub.devhttps://pub.dartlang.org 都新增到信任區域

  1. 開啟 Kaspersky Internet Security。
  2. 點選隱私圖示。
  3. 阻止網站跟蹤部分下,點選偏好設定按鈕。
  4. 在頂部圖示欄中,選擇威脅
  5. 威脅下,點選信任區域
  6. 選擇信任的網頁地址選項卡。
  7. 點選+按鈕,並新增 URL https://pub.dev
  8. 點選確定
  9. https://pub.dartlang.org 重複前兩個步驟