go.mod 裡面的 module 是 local path,故重拉一個新的 git 下來時,需執行 go mod download、go get local module\pkg\xxxxx 等、go get local module\cmd,三年前開發時的做法是否是對的?
Node.js npm mongodb
N 年前開發時使用的是 3.1.6 版本,package.json 寫法是 "^3.1.6",此寫法表示是相容該指定版本,此時此刻在我電腦重新拉 git,npm 會安裝 3.7.4 版本,如果執行自動測試,connect MongoDB 便會有問題,錯誤是無法連接,在 package.json 拿掉 ^,再 npm install 一次,強制使用 3.1.6 版本就正常,應該是跟 driver 安全政策有關,待驗證。
更正:不是跟安全性政策有關,單純只是從 Node.js 18 開始,解析 DNS 時,某些環境會導致 localhost 被解析為 IPv6 address,請詳此處。
其實錯誤訊息也可以看出被解析為 IPv6 address,昨天忙著寫文件沒有時間去解決問題,今天還是順利的找到原因了XD
有時候一個問題要不要修複,其實考量的點很多,絕對不是選擇一條最快解決的路就好。以我例子來說,這是個內部專案不會對外,故沒有安全性問題;同事依照我的文件是否可以正常執行沒有副作用?Yes(當然有極小可能性會有問題,畢竟其他 modules 不一定跟我當初版本一樣,就跟這個問題的發生原因一樣)。
故我昨天強制指定版本就是最快也是對我最方便的解決方式,當然沒有時間順便修掉 warning 也是有點小遺憾,就看之後時間允不允許囉?
2023/11/21 下午更新
早上還不覺得怎樣?下午越想越不對勁!如果說是因為 Node.js 實作的改變,mongodb 本身應該也有用到一些 Node.js 相關呼叫,否則無法解釋指定 3.1.6 版本就沒有問題的事實?
總之,這個問題解法真多,還有不改 code 直接帶參數給 node.exe 的解法!
2023/12/03 更新
版本真的是一個大問題!尤其專案是 N 年前開發的!陸續在其他交接專案都有遇到不能執行的問題,不論是我離職同事寫的 Server 還是我的 Device simulator,還好 N 年前開發時的資料夾還沒砍掉,順利找到當初使用的版本,只是虛驚一場。
這告訴我們一件事,package.json 版本千萬不要使用星號?
沒有留言:
張貼留言