內容

解決 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 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"

登入後無法存取 localhost

#

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

試試這個解決方法,它使用命令列來完成登入

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

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

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

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

    $ curl 'http://localhost:<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 的網路存取權。

卡巴斯基網路安全軟體的詳細說明

當您從功能表列關閉卡巴斯基網路安全軟體保護時,VPN 應用程式篩選器 sysextctrld 仍會在背景中執行。此篩選器會導致無法連線至 pub.dev。若要解決此問題,請將 https://pub.devhttps://pub.dartlang.org 都新增至信任區

  1. 開啟卡巴斯基網路安全軟體。
  2. 按一下隱私圖示。
  3. 封鎖網站追蹤區段中,按一下偏好設定按鈕。
  4. 在頂端圖示列中,選取威脅
  5. 威脅下方,按一下信任區
  6. 選取信任的網站網址索引標籤。
  7. 按一下+ 按鈕,並新增 URL https://pub.dev
  8. 按一下確定
  9. 針對 https://pub.dartlang.org 重複前兩個步驟