2023/02/06

[npm] 如何檢查 npm 全域套件是否更新至最新版本

markdown ### 問題 趁著更新 macOS 的版本,也順便把一些開發工具更新一波。 ### 檢查 npm 全域套件是否為最新狀態 1. 可直接執行下列指令來作檢查 ``` npx npm-check-updates -g ``` 2. 安裝 npm-check-updates 這個全域套件來作檢查 其實初次呼叫第一個方法即會詢問是否安裝 npm-check-updates 套件 ``` npm install -g npm-check-updates ``` 檢查指令 (執行結果與第一個方法相同) ``` ncu -g ```

2023/02/05

[Mac] 解決更新 macOS 後,在 Terminal 執行 command 時出現 xcrun 錯誤訊息

markdown ### 問題 今天在更新 macOS 後, 在終端機執行 command 時出現 xcrun 錯誤。 訊息如下: ``` xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun ``` ### 解決方法 重新安裝 Xcode Command Line Tools 即可 ``` xcode-select --install ```

2023/01/17

[Linux] 相見恨晚 rsync 取代 cp 的複製指令

markdown ### 問題情境 在 Linux Server 傳輸檔案,絕大多數的使用情境是可以直接用有 UI 介面的工具透過 SFTP 傳輸檔案。 但有時會遇到僅有文字介面的遠端操作環境,即先遠端到客戶主機,然後用 SSH 連線到指定的 Server。 以前只會在文字介面下用 `cp` 複製的指令,但這個指令的問題點在於: 1. 不會覆蓋已存在的檔案,若要覆蓋需加 -i (interactive),但會一個一個詢問是否要覆蓋。一兩個檔案還沒什麼,當要更新的檔案很多時,操作上有點沒效率。 2. 若在 root 的權限操作下,會蓋掉原使用者及群組的權限 (這可是大件事啊...) ### 相見恨晚的 rsync 一直以為 rsync 只是用來同步用,透過跟社群朋友交流,發現它是有更新檔案覆蓋的功效,操作上跟 cp 類似,但是最棒的是可以保留指定使用者及群組權限,還可比對各檔案差異的傳輸狀況。 我目前的操作情境是把差異更新的檔案程式先下載到主機再做更新,所以只會做複製及更新檔案的動作,不做任何刪除檔案的異動。(若遇到真需要刪檔的時候,才再行確認手動刪除) 更新操作動作如下: ``` rsync -avh /source/update_folder/ /target/project_folder/ ``` 常用參數: - `-v` : verbose 模式 - `-r` : recursive 遞迴所有子目錄下的目錄及檔案 - `-a` : 相當於 `-rlptgoD` 參數,遞迴備份所有子目錄下的目錄與檔案,保留連結檔、檔案的擁有者、群組、權限以及時間戳記 - `-z` : 使用壓縮 - `-h` : 將數字以比較容易閱讀的格式輸出 對應 cp 的類似的用法則是 ``` cp -ia /source/update_folder/* /target/project_folder/ ``` 透過 rsync 來做檔案更新操作,真的是相見恨晚呀!rsync 還有更多強大的使用情境,待日後慢慢研究啦~ 同場加碼 Windows 也可以使用 rsync (工具: [cwRsync](https://itefix.net/cwrsync)) ### 參考資料 - [Linux 使用 rsync 遠端檔案同步與備份工具教學與範例](https://blog.gtwang.org/linux/rsync-local-remote-file-synchronization-commands/)

2023/01/16

[MySQL] 解決匯入資料時出現 Got a packet bigger than max_allowed_packet bytes 問題

markdown ### 問題 在 MySQL 匯入 *.sql 資料時出現 `[Err] 1153 - Got a packet bigger than 'max_allowed_packet' bytes` 的錯誤資訊。 ### 解決方法 1. 修改 MySQL 設定檔案 在 [mysqld] 的設定區塊下加上 `max_allowed_packet=100M` 即可接受 100MB 以內的檔案 (預設為 16MB) 可依匯入的檔案大小做設定修改,最大值為 1GB,修改後必需重啟 Server 以生效 2. 不修改設定檔的狀況下,可在 Commandline 加上 `--max_allowed_packet` 參數設定 例如: ``` mysql --max_allowed_packet=100M -u root -p database < dump.sql ``` ### 相關連結 - [mysql Client Options](https://dev.mysql.com/doc/refman/8.0/en/mysql-command-options.html#option_mysql_max-allowed-packet)

2022/12/27

[VS2022] 如何更新 IIS Express 開發憑證

markdown ### 前言 繼上回更新 ASP.NET Core 的開發憑證,恰巧 IIS Express 的本機開發憑證也到期了。今天就來解決如何更新 IIS Express 的開發憑證。 ### 問題 今天在 Visual Studio 2022 執行 ASP.NET MVC 的網站時,出現 "根據驗證程序,遠端憑證是無效的。" 的錯誤訊息。檢查後發現原先本機的開發憑證已經到期了。 API 呼叫遠端憑證無效這件事,程式端也是有對應的解決方式,但是在不改程式的狀況下,啟用 https 網站的開發模式一定還是會遇到,先治本吧!

2022/12/18

[.NET] 更新信任 ASP.NET Core 開發憑證

markdown ### 前言 每年都要更新 ASP.NET Core 本機端自簽的開發憑證,剛好就在不久前憑證過期。透過剛結束的 [.NET Conf Taiwan 2022](https://dotnetconf.study4.tw/) 從保哥那裡學到一招更新方法。立即現學現賣。 ### 過期的憑證 寫部落格的同時恰巧經歷了正常到過期的憑證變化。 ``` $ dotnet dev-certs https --check --trust ``` 原本的 `A valid certificate was found` 變成 `The following certificates were found, but none of them is trsuted.`

> 我的開發環境: Windows 10,若是其他的平台可以查詢 [Microsoft Learn - 使用 .NET CLI 產生自我簽署憑證](https://learn.microsoft.com/zh-tw/dotnet/core/additional-tools/self-signed-certificates-guide?WT.mc_id=DT-MVP-5002629) ### 更新步驟 1. 先清掉舊的憑竳 ``` $ dotnet dev-certs https --clean ``` 2. 再重新建立新憑證 ``` $ dotnet dev-certs https --trust ``` ### 見證更新過程 正常 -> 過期 -> 清除 -> 重建 -> 正常

### 相關資料 - [使用 .NET CLI 產生自我簽署憑證](https://learn.microsoft.com/zh-tw/dotnet/core/additional-tools/self-signed-certificates-guide?WT.mc_id=DT-MVP-5002629)

2022/12/11

[C#] 如何修正錯誤 CS1738 "named argument specifications must appear after all fixed arguments have been specified" 問題

markdown ### 問題 最近遇到客戶拿到原始碼在編譯過程出現 "CS1738 named argument specifications must appear after all fixed arguments have been specified" 錯誤 中文錯誤訊息 "CS1738 必須在所在固定引數皆已指定之後,具名引數規格才可出現。請使用語言版本 7.2 或更高的版本,以允許非後置的具名引數。" - 開發環境: 使用 VS2022 - 客戶環境: 使用 VS2017 相同的程式,在 VS2022 下編譯沒有問題,而在 VS2017 卻遇到無法正確編譯。 程式大致如下: ``` context.MapRoute( name: "MyRouteName", url: "MyArea/News/{type}", new { controller = "News", action = "TypeList" } ); ``` ### 解決方法 1. 依照參數位置給予對應值, 不加任何具名引數 (把具名引數 `name:` 及 `url:` 都拿掉) 2. 把所有具名引數都加上去, 即第三個參數前須加上具名引數 `defaults:` 3. 更新 Visual Studio 到新版本 (需支援 C# 7.2 以上的版本) ### 相關連結 - [Named and Optional Arguments (C# Programming Guide)](https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/named-and-optional-arguments?WT.mc_id=DT-MVP-5002629) - [How to fix Error CS1738 Named argument specifications must appear after all fixed arguments have been specified](https://stackoverflow.com/questions/57062106/how-to-fix-error-cs1738-named-argument-specifications-must-appear-after-all-fixe)