兄弟們,作為一個(gè)工作十年的老后端,最近兩個(gè)月沒(méi)事學(xué)了學(xué)前端,本來(lái)學(xué)之前還信心滿(mǎn)滿(mǎn)“前端你工程話(huà)再?gòu)?fù)雜能有些Java項(xiàng)目那些切面、各種Bean注解、maven復(fù)雜?一個(gè)月上手應(yīng)該沒(méi)問(wèn)題”
結(jié)果最近一直加班……兩個(gè)月了,才把Vue看了個(gè)大概,起初剛看前端的時(shí)候發(fā)現(xiàn)Y工程化咋用那么多工具和插件啊還是我后端香用go tools 或者M(jìn)aven管理項(xiàng)目所有的依賴(lài)、插件、構(gòu)建和打包。
誒后來(lái)發(fā)現(xiàn)走了點(diǎn)彎路,人Vue框架里有一個(gè)vue.config.js能幫咱們統(tǒng)一管理webpack、gulp什么的這些工具在項(xiàng)目里的配置,這樣看來(lái)也還行吧。
所以就在上周,當(dāng)我厭倦了看各種Vue Demo項(xiàng)目,覺(jué)得這都太TM簡(jiǎn)單了,還是得看看實(shí)戰(zhàn)代碼。抱著這個(gè)目的,我用一瓶東方樹(shù)葉腐化了我們業(yè)務(wù)的一個(gè)前端老哥,讓他給我開(kāi)了個(gè)管理后臺(tái)項(xiàng)目的代碼權(quán)限。
下載下來(lái)項(xiàng)目后,我大概看了看項(xiàng)目的結(jié)構(gòu)和一些頁(yè)面組件的代碼,大概能看懂個(gè)百分之六七十的,于是我信心滿(mǎn)滿(mǎn)的準(zhǔn)備編譯運(yùn)行下這個(gè)項(xiàng)目,連給他提供接口那后端項(xiàng)目外都早早的在電腦上跑起來(lái)了,心想前后端項(xiàng)目都有,我這一下子不就閉環(huán)了嘛!
結(jié)果卻是...閉環(huán)還沒(méi)開(kāi)始呢就結(jié)束了,直接第一步npm install就卡住了。不管怎么編譯都是下面這個(gè)錯(cuò):
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這項(xiàng)目人家前端這周還有上線(xiàn)記錄呢?咋在我這連編譯都過(guò)不去,看報(bào)錯(cuò)信息是算哈希的時(shí)候有問(wèn)題,算了拿到ChatGPT里問(wèn)一下。 剛好這周在VsCode上安了一個(gè)Copilot Chat,他們宣發(fā)里說(shuō)是能幫開(kāi)發(fā)者fix bug,試一下看看他們是不是吹牛皮呢。
圖片
微軟果真沒(méi)騙人Github Copilot Chat真的引入了GPT的Chat接口,連回答都跟ChatGPT一樣的片湯話(huà)。
沒(méi)辦法還是運(yùn)用我善于搜索解決問(wèn)題的內(nèi)功吧, .....直接把報(bào)錯(cuò)粘貼到Google上看看,肯定有很多類(lèi)似問(wèn)題的解決方案。
經(jīng)過(guò)我在Google上的一番搜索和篩查后,終于在Stack Overflow上找到了同類(lèi)問(wèn)題的帖子,而且討論相當(dāng)激烈,帖子里有好幾十條回答,那看來(lái)是沒(méi)錯(cuò)了在這肯定能找到答案。
首先咱們看一下提問(wèn)者自己的描述:
圖片
I created the default IntelliJ IDEA React project and got this:
意思是用 IDEA 創(chuàng)建了一個(gè)React項(xiàng)目,然后就遇到了和我們相同的錯(cuò)誤。提問(wèn)者在這里用的是React,但是看這個(gè)錯(cuò)誤信息里能看出來(lái)這個(gè)是NodeJS爆出來(lái)的,咱們先看看提問(wèn)者最后采納的答案是什么?
圖片
回答者采用的方案是在項(xiàng)目的package.json里配置給啟動(dòng)命令添加--openssl-legacy-provider選項(xiàng),但是評(píng)論里就有人對(duì)這個(gè)方案提出了質(zhì)疑:
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.
意思是這樣會(huì)讓項(xiàng)目運(yùn)行在非安全SSL的環(huán)境下,這么干雖然能一時(shí)緩解項(xiàng)目問(wèn)題的癥狀但是大概率沒(méi)有解決底層的根本問(wèn)題。
看來(lái)這個(gè)回答雖然在提問(wèn)者那里得到了認(rèn)同,但是網(wǎng)友們覺(jué)得這個(gè)是治標(biāo)不治本,那么什么是導(dǎo)致這個(gè)問(wèn)題的根本原因呢?咱們接著往下看看其他答案里怎么說(shuō)的。
圖片
有位老哥過(guò)來(lái)剖析出現(xiàn)這個(gè)問(wèn)題的真正原因了。
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的維護(hù)者修復(fù)了一個(gè)SSL的漏洞,這是一個(gè)破壞性變更,如果使用的NodeJS v17以上版本,但是項(xiàng)目的package.json里使用的是NPM上老版本的SSL庫(kù)的話(huà)就會(huì)導(dǎo)致這個(gè)問(wèn)題。
怪不得我們公司前端運(yùn)行項(xiàng)目沒(méi)事,他們電腦上的Node版本都是v15或者v16的。那我也不能降低我的NodeJS版本呀,我電腦上的是v18,我不想折騰降低我電腦上安裝的NodeJS的版本,再搜搜有沒(méi)有其他簡(jiǎn)單的方案,粗暴點(diǎn)也沒(méi)事,畢竟我也不往人家前端項(xiàng)目里提代碼,我就摸魚(yú)時(shí)偷偷在自己電腦上學(xué)學(xué)而已。
在這么多回答里搜了一把 Vue.js
其中有個(gè)回答說(shuō)在vue.config.js 中添加下面這段代碼就能繞過(guò)那個(gè)錯(cuò)誤。
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); };}我試了一把還真可以,但是看不明白這代碼啥意思,看著這個(gè)尖頭函數(shù)有點(diǎn)像Java的Lambda。這玩意好像是JavaScript ES6的語(yǔ)法,ES5的語(yǔ)法我都沒(méi)學(xué)更不可能學(xué)ES6了,直接問(wèn)問(wèn)Copilot Chat這代碼啥意思,為啥能起作用
圖片
具體為什么能起作用,大家點(diǎn)擊看大圖哈。不過(guò)這個(gè)答案下邊也有人評(píng)論說(shuō)這個(gè)方案只是把問(wèn)題繞過(guò)去了,最好還是修改SSL的配置,這個(gè)我就不修改了,我的要求是代碼能跑起來(lái)就行。
這里把Stack Overflow上的這個(gè)帖子也放這里,大家可以去感受下外國(guó)網(wǎng)友的討論氛圍。
https://stackoverflow.com/questions/69938570/
最近學(xué)了點(diǎn)前端真是有點(diǎn)隔行如隔山的感覺(jué)了,不過(guò)發(fā)現(xiàn)問(wèn)題解決問(wèn)題的過(guò)程還是對(duì)自己有很多正反饋的,不然程序員也不會(huì)沒(méi)事學(xué)那么多東西了。
這里簡(jiǎn)單記錄一下我遇到的這個(gè)問(wèn)題,如果你也是想跨界學(xué)點(diǎn)前端,把網(wǎng)上開(kāi)源或者公司里現(xiàn)成的項(xiàng)目拿到自己電腦上運(yùn)行的時(shí)候可能也會(huì)有這個(gè)問(wèn)題。
我一直覺(jué)得學(xué)一門(mén)語(yǔ)言的最直接的方式就是拿到現(xiàn)有的項(xiàng)目去學(xué),不然老看Demo也還是到不了能去開(kāi)發(fā)項(xiàng)目做需求的級(jí)別。這么看來(lái)公司里項(xiàng)目雜也是有點(diǎn)好處的哈,是時(shí)候亮出我八年老Java,六年老Go,十年老PHP的身份了
本文鏈接:http://m.www897cc.com/showinfo-26-11900-0.html十年老后端運(yùn)行公司前端項(xiàng)目,連編譯都沒(méi)過(guò)去...問(wèn)題出在哪?
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com