昨天下午,來了個剛畢業的學弟,很認真地跑過來問我:「哥,我看網上好多人都說前端要學Node,我到底要學到什麼程度啊?是不是得把Express、Koa那些都搞會了才能找到好工作?」
看着他一臉焦慮的樣子,我想起了幾年前的自己。
那時候Next.js剛火起來,前端的邊界一下子就模糊了,我也很慌,覺得再不學後端就要被淘汰了。於是跑去啃Express的源碼,研究Koa的中間件,折騰了半天,結果發現日常工作裡,好像也用不太上,慢慢就忘了。
現在幹了八年,也帶了個小團隊,回頭再看這個問題,我有了點不一樣的想法。
我首先跟我們組那個弟弟說的就是,你得先搞明白,我們前端學Node,目的不是為了去搶後端同學的飯碗。
我們學它,是因為我們整個前端的體系——你用的Webpack, Vite, ESLint, Babel, pnpm——全都是建立在Node.js這個地基上的。你不懂地基,樓蓋高了心裡就會發虛。
所以我覺得,有些東西是繞不開的,是你作為一個現代前端工程師,必須掌握的基本功。
比如package.json
你肯定得門兒清吧?dependencies
和devDependencies
搞混了,那是要出生產事故的。還有scripts
,你怎麼跑項目,怎麼打包,不都在那裡面嗎?這都是基礎中的基礎。
還有模塊化,CommonJS和ESM那點破事兒,雖然很煩,但你必須得懂。不然哪天Vite或者Webpack報個require is not defined
的詭異錯誤,你都不知道從哪下手查。path
模塊也一樣,我CR代碼的時候,現在還經常看到有同學在配置文件裡手動拼接路徑字符串,比如'../' + '/src'
,我一看就頭大,跟他說一定要用path.resolve
或者path.join
,不然哪天代碼跑到Windows上就掛了。
把這些,再加上fs
讀寫個文件(比如寫個小腳本自動生成些模板代碼)、process.env
搞明白環境變量,我覺得你作為一個前端,就已經及格了,日常開發絕對夠用。
但想拿高薪,想成為團隊裡能扛事兒的高級工程師,那肯定不夠。
高級體現在哪?體現在你能解決一些「問題」。
最常見的就是跨域。本地開發localhost:5173
請求測試環境的API,肯定跨域啊。這時候你總不能天天在群裡@後端,讓他給你加白名單吧?自己用Vite的proxy
,或者順手用Express快速起個代理服務,幾行代碼就搞定了。這事兒,就得會。
還有就是現在流行的Next.js, Nuxt這些元框架。你說它是前端還是後端?它都有。你在getServerSideProps
或者一個server route
裡寫的代碼,那就是實打實地跑在Node環境裡的。你不懂Node,那你怎麼調試它,怎麼理解它的生命週期和執行環境?所以你看,技術的發展,是逼著你往前走的。
我們團隊之前為了提效,我還讓組裡的同學寫過一些簡單的CLI工具,比如一個自動根據API的Swagger文檔,生成TypeScript類型定義的小腳本。這就是典型的進階能力了,能讓你從一個業務開發者,開始具備工具開發者的思維。
再往上,就是專家或者架構師的層面了。比如我們常說的BFF(服務於前端的後端),你需要自己用Node.js去搭建一個中間層,去做接口的聚合、裁剪,甚至需要連資料庫做一些操作。到了這個層面,你其實已經是一個前端驅動的全栈工程師了,你的能力邊界已經非常寬了。但這對於大多數前端同學來說,可以作為長遠目標,不必強求。
聊了這麼多,其實我想說的核心就一個:不要為了學Node.js而學Node.js。
你的目的,不是為了在簡歷上多寫一行熟悉Node.js全家桶,而是為了解決一個更完整的問題。
是為了能獨立搞定一個項目的工程化配置,是為了能解決團隊的開發提效問題,是為了能駕馭一個全栈框架。
所以,別焦慮了。
先把手頭那些package.json
、vite.config.js
裡的東西搞搞明白。然後,當你遇到下個問題,發現它需要一點Node的知識才能解決時,再去學。
解決問題,永遠是最好的老師。
大概就是這樣吧,一點不成熟的個人看法,希望能幫到你。