目錄

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

從企業防火牆後方執行 Pub get 失敗

#

從命令列中,pub 會採用 http_proxyhttps_proxy 環境變數。您可以如下設定 Proxy 伺服器環境變數。

在 Linux/macOS 上

$ export https_proxy=hostname:port

在 Windows 命令提示字元上

cmd
$ set https_proxy=hostname:port

在 Windows PowerShell 上

$ $Env:https_proxy="hostname:port"

如果 Proxy 需要憑證,您可以如下設定它們。

在 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://127.0.0.1:<port>?code=... 無法連線。

請試試此變通方法,它會使用命令列來完成登入

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

  2. 在彈出的瀏覽器視窗中,登入。
    瀏覽器會重新導向至新的 localhost URL (https://127.0.0.1:<port>?code=...),但抱怨該 URL 無法連線。

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

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

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

嘗試尋找套件時收到 Socket 錯誤

#

如果您沒有網際網路連線、您的 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 重複前兩個步驟