
昨天下午,来了个刚毕业的学弟,很认真地跑过来问我:"哥,我看网上好多人都说前端要学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的知识才能解决时,再去学。
解决问题,永远是最好的老师。
大概就是这样吧,一点不成熟的个人看法,希望能帮到你。