跳至主要内容

日常錯誤排除紀錄

· 閱讀時間約 5 分鐘
Zephyr
Engineer

寫程式總是會遇到一堆問題。

我們在這裡紀錄一些瑣碎的問題和解決方法。

提示

本文章會持續更新。

1. 執行 npx docusaurus start 時出現以下錯誤

  • 錯誤訊息:

    file:///home/user/workspace/blog/node_modules/@docusaurus/core/bin/docusaurus.mjs:30
    process.env.BABEL_ENV ??= 'development';
    ^^^

    SyntaxError: Unexpected token '??='
  • 解決方法:

    ??= 操作符需要 Node.js 15.0.0 或更高版本才能支持。

    nvm install node
    nvm use node

2. choco 命令無法辨識

  • 錯誤訊息:

    PS C:\Windows\System32> choco install git -y
    >>
    choco : 無法辨識 'choco' 詞彙是否為 Cmdlet、函數、指令檔或可執行程式的名稱。請檢查名稱拼字是否正確,如果包含路徑的話,請確認路徑是否正確,然後再試一次。
    位於 線路:1 字元:1
    + choco install git -y
    + ~~~~~
    + CategoryInfo : ObjectNotFound: (choco:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
  • 解決方法:

    這表示沒有成功安裝 Chocolatey,失敗的原因通常是沒有以「系統管理員」身份執行 PowerShell。

    請以「系統管理員」身份執行 PowerShell,然後再次執行 Chocolatey 安裝指令。

    Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

3. Chocolatey 安裝失敗

  • 錯誤訊息:

    警告: An existing Chocolatey installation was detected. Installation will not continue. This script will not overwrite existing installations.
    If there is no Chocolatey installation at 'C:\ProgramData\chocolatey', delete the folder and attempt the installation again.

    Please use choco upgrade chocolatey to handle upgrades of Chocolatey itself.
    If the existing installation is not functional or a prior installation did not complete, follow these steps:
    - Backup the files at the path listed above so you can restore your previous installation if needed.
    - Remove the existing installation manually.
    - Rerun this installation script.
    - Reinstall any packages previously installed, if needed (refer to the lib folder in the backup).

    Once installation is completed, the backup folder is no longer needed and can be deleted.
  • 解決方法:

    這表示 Chocolatey 已經安裝過了,請先刪除舊的安裝,然後再重新安裝。

    Remove-Item "C:\ProgramData\chocolatey" -Recurse -Force

4. 遠端機器埠口轉發

  • 描述:

    在遠端機器上啟動了一個服務,例如 TensorBoard,但是無法直接訪問,因此必須通過本地機器進行轉發。

  • 解決方法:

    假設服務運行在遠端機器的 6006 端口,本地機器想要訪問的端口也是 6006。

    我們在使用 SSH 登入時,可以通過 -L 參數 進行端口轉發:

    ssh -L 6006:localhost:6006 user@remote_ip_address

    這樣本地機器就可以通過 http://localhost:6006 訪問遠端機器的 TensorBoard 服務了。

5. 開發和部署環境網頁渲染行為不一致

  • 描述:

    custom.css 中設置了部落格的版面樣式:

    .container {
    max-width: 90%;
    padding: 0 15px;
    margin: 0 auto;
    }

    在部署階段,這個樣式似乎被其他更高優先級的樣式覆蓋了,但是在開發階段,這個樣式是正常的。

  • 解決方法:

    更具體地選擇目標:

    body .container {
    max-width: 90%;
    padding: 0 15px;
    margin: 0 auto;
    }

6. Turbojpg 讀取影像出現警告

  • 描述

    讀取影像時出現以下警告訊息:

    turbojpeg.py:940: UserWarning: Corrupt JPEG data: 18 extraneous bytes before marker 0xc4
    turbojpeg.py:940: UserWarning: Corrupt JPEG data: bad Huffman code
    turbojpeg.py:940: UserWarning: Corrupt JPEG data: premature end of data segment
  • 解決方法

    看了很煩,應該要過濾剔除這些資料:

    import cv2
    import warnings

    data = ['test1.jpg', 'test2.jpg', 'test3.jpg']

    for d in data:
    with warnings.catch_warnings(record=True) as w:
    warnings.simplefilter("always", UserWarning)

    # 讀取影像,看看是否有警告
    cv2.imread(d)

    # 有的話就刪除
    if w:
    data.remove(d)

    # 最後可以透過 json 或其他方式紀錄清洗後的資料

7. Docusaurus 部署後 showLastUpdateTime: true 無效

  • 描述

    docusaurus.config.js 中設置了 showLastUpdateTime: trueshowLastUpdateAuthor: true,,但是部署後發現沒有效果,渲染頁面中全部都是一樣的時間和作者?

  • 解決方法

    因為在部署時,checkout 分支的時候設定錯誤,導致 git 無法正確獲取最後更新時間和作者。

    這樣改:

    steps:
    - uses: actions/checkout@v4
    with:
    fetch-depth: 0

    只要設定 fetch-depth: 0,問題就解決了。