兄弟們,作為一個工作十年的老后端,最近兩個月沒事學了學前端,本來學之前還信心滿滿“前端你工程話再復雜能有些Java項目那些切面、各種Bean注解、maven復雜?一個月上手應該沒問題”
結果最近一直加班……兩個月了,才把Vue看了個大概,起初剛看前端的時候發現Y工程化咋用那么多工具和插件啊還是我后端香用go tools 或者Maven管理項目所有的依賴、插件、構建和打包。
誒后來發現走了點彎路,人Vue框架里有一個vue.config.js能幫咱們統一管理webpack、gulp什么的這些工具在項目里的配置,這樣看來也還行吧。
所以就在上周,當我厭倦了看各種Vue Demo項目,覺得這都太TM簡單了,還是得看看實戰代碼。抱著這個目的,我用一瓶東方樹葉腐化了我們業務的一個前端老哥,讓他給我開了個管理后臺項目的代碼權限。
下載下來項目后,我大概看了看項目的結構和一些頁面組件的代碼,大概能看懂個百分之六七十的,于是我信心滿滿的準備編譯運行下這個項目,連給他提供接口那后端項目外都早早的在電腦上跑起來了,心想前后端項目都有,我這一下子不就閉環了嘛!
結果卻是...閉環還沒開始呢就結束了,直接第一步npm install就卡住了。不管怎么編譯都是下面這個錯:
Error: error:0308010C:digital envelope routines::unsupported at new Hash (node:internal/crypto/hash:71:19) at Object.createHash (node:crypto:133:10) at module.export
這項目人家前端這周還有上線記錄呢?咋在我這連編譯都過不去,看報錯信息是算哈希的時候有問題,算了拿到ChatGPT里問一下。 剛好這周在VsCode上安了一個Copilot Chat,他們宣發里說是能幫開發者fix bug,試一下看看他們是不是吹牛皮呢。
圖片
微軟果真沒騙人Github Copilot Chat真的引入了GPT的Chat接口,連回答都跟ChatGPT一樣的片湯話。
沒辦法還是運用我善于搜索解決問題的內功吧, .....直接把報錯粘貼到Google上看看,肯定有很多類似問題的解決方案。
經過我在Google上的一番搜索和篩查后,終于在Stack Overflow上找到了同類問題的帖子,而且討論相當激烈,帖子里有好幾十條回答,那看來是沒錯了在這肯定能找到答案。
首先咱們看一下提問者自己的描述:
圖片
I created the default IntelliJ IDEA React project and got this:
意思是用 IDEA 創建了一個React項目,然后就遇到了和我們相同的錯誤。提問者在這里用的是React,但是看這個錯誤信息里能看出來這個是NodeJS爆出來的,咱們先看看提問者最后采納的答案是什么?
圖片
回答者采用的方案是在項目的package.json里配置給啟動命令添加--openssl-legacy-provider選項,但是評論里就有人對這個方案提出了質疑:
but note that --openssl-legacy-providermeans you are now almost certainly running with konwn insecure SSL, so this might mitigate the symptom, but it probable doesn't fix the underlying problem.
意思是這樣會讓項目運行在非安全SSL的環境下,這么干雖然能一時緩解項目問題的癥狀但是大概率沒有解決底層的根本問題。
看來這個回答雖然在提問者那里得到了認同,但是網友們覺得這個是治標不治本,那么什么是導致這個問題的根本原因呢?咱們接著往下看看其他答案里怎么說的。
圖片
有位老哥過來剖析出現這個問題的真正原因了。
In Node.js v17, the Node.js developers closed a security hole in the SSL provider. This fix was a breaking change that corresponded with similar breaking changes in the SSL packages in NPM. When you attempt to use SSL in Node.js v17 or later without also upgrading those SSL packages in your package.json, then you will see this error.
意思是在NodeJS v17 版本,NodeJS的維護者修復了一個SSL的漏洞,這是一個破壞性變更,如果使用的NodeJS v17以上版本,但是項目的package.json里使用的是NPM上老版本的SSL庫的話就會導致這個問題。
怪不得我們公司前端運行項目沒事,他們電腦上的Node版本都是v15或者v16的。那我也不能降低我的NodeJS版本呀,我電腦上的是v18,我不想折騰降低我電腦上安裝的NodeJS的版本,再搜搜有沒有其他簡單的方案,粗暴點也沒事,畢竟我也不往人家前端項目里提代碼,我就摸魚時偷偷在自己電腦上學學而已。
在這么多回答里搜了一把 Vue.js
其中有個回答說在vue.config.js 中添加下面這段代碼就能繞過那個錯誤。
const crypto = require('crypto');/** * The MD4 algorithm is not available anymore in Node.js 17+ (because of library SSL 3). * In that case, silently replace MD4 by the MD5 algorithm. */try { crypto.createHash('md4');} catch (e) { console.warn('Crypto "MD4" is not supported anymore by this Node.js version'); const origCreateHash = crypto.createHash; crypto.createHash = (alg, opts) => { return origCreateHash(alg === 'md4' ? 'md5' : alg, opts); };}
我試了一把還真可以,但是看不明白這代碼啥意思,看著這個尖頭函數有點像Java的Lambda。這玩意好像是JavaScript ES6的語法,ES5的語法我都沒學更不可能學ES6了,直接問問Copilot Chat這代碼啥意思,為啥能起作用
圖片
具體為什么能起作用,大家點擊看大圖哈。不過這個答案下邊也有人評論說這個方案只是把問題繞過去了,最好還是修改SSL的配置,這個我就不修改了,我的要求是代碼能跑起來就行。
這里把Stack Overflow上的這個帖子也放這里,大家可以去感受下外國網友的討論氛圍。
https://stackoverflow.com/questions/69938570/
最近學了點前端真是有點隔行如隔山的感覺了,不過發現問題解決問題的過程還是對自己有很多正反饋的,不然程序員也不會沒事學那么多東西了。
這里簡單記錄一下我遇到的這個問題,如果你也是想跨界學點前端,把網上開源或者公司里現成的項目拿到自己電腦上運行的時候可能也會有這個問題。
我一直覺得學一門語言的最直接的方式就是拿到現有的項目去學,不然老看Demo也還是到不了能去開發項目做需求的級別。這么看來公司里項目雜也是有點好處的哈,是時候亮出我八年老Java,六年老Go,十年老PHP的身份了
本文鏈接:http://www.tebozhan.com/showinfo-26-11900-0.html十年老后端運行公司前端項目,連編譯都沒過去...問題出在哪?
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com