由于页面篇幅限制,很多地方用了折叠展开的方式,强烈建议点开这些折叠查看完整内容
📄简述
3R教室(社区)自2022年开始至今已运营多年,成长为一个拥有800人付费会员规模的线上学习和资源互通的IT社区。站长自己也在教学中不断学习,在学习中不断积累,结合自身以往的经验,为社区创造并总结了许多有用的知识,以及帮助许多会员朋友获得了一定的成果
然而,随着时代的发展以 及技术、市场的日新月异之变化,教室本身也需要新的思维和力量的注入。为此,抱着"不破不立"的精神,站长选择了推倒重来,重新编写一套永久更新的课程 - TS全栈开发与自由工作实战》(与其说是课程,比如说是一个滚动更新的期刊制的"技术手册")
新课程虽然是基于以往的《React+Nestjs企业级全栈开发》、《TS全栈开发-Next.js+Hono.js实践》、《远程掘金课》等几套课之上构建,但迭代方式是不同的。新课程将会是终身滚动式更新的。且会不断地从站长和其他会员的长期实践与经验中提取精华并推陈出新!这类似于Ubuntu这类传统的Linux发行版与Arch这类滚动式发行版之间的区别。譬如:在技术课方面,目前课程主要是更新及维护当下流行的next.js、hono.js、prisma等ts全栈开发技能,但是,市场对AI大模型的使用和应用级别的开发需求比较大的时候,我们会及时把这部分内容以加入到课程中
另外,课程中的技术部分仍然以文档+代码为主(但对难点也会做小视频),方便随时升级到最新的生态,也更适合扩展性学习。比如tailwind课程中是v3,而现在v4正式版已经出来,我们就可以方便的增加一篇无痛升级的章节
而原来的《掘金课》部分,除了以前的客户谈判会议记录等纯视频资料外,对于像外包获客渠道,独立开发作品的推广和营销渠道、工商注册、税务、海外收款等内容也会以视频课程的形式融入课程中更新。这样,学习者可以掌握最新的市场需求以进行成功率更高的实践
🌈背景
3R的课程无论是技术课还是变现课又或者是各种社区服务,都围绕着一个目标 - 自由工作 而展开。虽然偶尔社区也会有同学自助地内推、互推一些坐班,也有"大厂会员群"这类社区、社区会议中也会有坐班嘉宾分享等等内容。但是整个社区95%以上的内容和服务都是以自由工作为中心的!
👇什么是自由工作?以下是3R教室对于自由工作的阐述(强烈建议点开查看)
"自由工作"是3R教室的核心概念!思路来源是遍地做小生意的个体户、中小乡镇企业、早年间起飞的电商运营者以及海外的一些创造了巨额收入的个人或小团队开发者。这是与头部一二线零零碎碎几个大厂统一互联网,而大家都进去打工卷的方式是相反的两个极端。也就是我们不需要集中力量做大规模事业,而是分散力量各搞各的,然后也能创造出惊人的收入。与此同时,享受无限的时间和空间自由,并且不必担心被裁员等问题,只为自己的事业负责和奋斗。也不用全部集中去大城市当打工人,而是在三四县城市甚至小县城就可以通过远程/本地盈利,从而获得比大厂上班还要高的收入,比一线城市低得多的房价与消费。简单来说就是:化整为零
所谓自由工作,其介于打工和开公司创业之间,风险接近于上班而收益和自由度趋近于创业。相当于小成本或零成本的个人远程小微创业,一般成长路径为先从个人全栈(本职工作轻松的话也可以兼职)开始,然后有一定盈利规模后注册一个个体工商户经营,再进一步就是获得一笔种子轮投资做大做强或者就成立一个小规模纳税人的独资小企业长期躺平式经营。类似于程序员和生意人直接的结合体!
相对于坐班来说,站长认为,在如今的大环境下(总之不是很好的 经济环境),自由工作可能是未来几年、十几年甚至几十年的趋势!因为这更加适合普通人。而一味的卷八股可能卷到最后毛都没有一根,因为当前甚至有些皮包公司或OD现在都要求211以上了😅。并且该裁员还是裁员,该失业还是失业,命运永远掌握在他人手里。大部分人也不是一线土著,高额的房价和消费以及身在异地,使得很多打工者没有任何自由且背负了巨大的生存压力和孤独感!目前来看,后续打工的风险不仅比自由工作大,甚至超过了创业,而收益却很一般,性价比并不高!
狭义上的自由工作并不包括远程工作(或者说是"数字游民"),因为这是最不自由的自由工作。但为了概念统一,我们暂且把远程工作也算在自由工作的一部分吧。远程工作从根本上来说还是在打工,甚至是不如坐班的临时工。不过远程工作虽然有诸多缺点,譬如,不稳定(随时无需赔偿的解约)、容易被白嫖、部分需要口语(大部分不需要)、有时差、每天有会议、容易007等等问题。但如果运气足够好的情况下,的确可以找到比较适合的长期远程工作。教室里不乏有做了好多年的稳定高薪远程工作的会员同学。另外,与坐班相比虽然缺点较多,但是也有一些优点。比如相对来说不卷一些(当然Java这些国内很卷的技术栈远程同样非常卷...),而且减少了通勤和大城市的生活成本。如果觉得自己比较适合打工,无法承担自由工作的风险。那么,具体选择坐班还是远程,这是一个仁者见仁智者见智的问题了。而真正的自由工作相对于远程打工来说,成功率虽然低很多,但是天花板高太多。一旦形成稳定的私域圈子和流量来源,那么,将会有源源不断的收入。并且在干自己喜欢的事的同时,也不必担心被裁员或者辞退而换工作。同时,如果做得比较出色很容易实现财务自由,融资等。另外就是,想休息就休息,每天都是非常充实和充满激情的状态很棒。这也是当初站长在如此困难的情况下,辞掉远程工作,选择自由工作的原因所在!远程工作作为一个临时缺钱或者坐班刚被裁,失业且无存款的情况下的过渡还是可取的。但是,并不建议作为终身事业。因为总有代码写不动、设计做不动的时候,而且老是换工作命运掌握在他人手里也不是很好。这时候,你会发现拥有自己的事业是多么好的体验。打工无论远程还是坐班总是处于一眼望到头的焦虑中,做"数字游民"始终不是长久之计,而创业的人生永远充满着未知的激情和挑战!
相对于高成本创业来说,自由工作模式的远程协作式、小微创业模型,极大地减轻了经济层面的负担!一般做自由工作,我们会从个人或者一个个体户开始。而个体户的核定征税税额非常之低,基本在三个点以内(这都包含了个人所得税),甚至有些地区全免税的。相对于公司来说,少去了一大部分运营成本。再则,一般公司运营的话你需要招聘人员发工资和社保等等,加大了创业的负担。而个体户则不需要这些,譬如,你是通过接单实现盈利,那么,只要从互联网或者我们教室里找几位合作伙伴一起开发,扣除开发成本后,所得利润就是你的。而客户一般都是442付款,这样可以保证你稳赚不亏,极大地降低了风险。且口碑佳的情况下,每个项目又会有长期维护费,且容易形成老客户带新客户的模式,从而不断有稳定收入。又比如卖课、自己写作品卖这种无成本的经营方式,那么,个体户如果120万一年以内的盈利收进来的钱就全是你的不需要缴纳一分钱税收。而小规模的独资企业税收也是非常之低。从成本上来说,自由工作的方式不仅比开个股份企业的风险小得多,税收方面比打工要缴纳的个人所得税也低的多。而且风险极低,非常适合IT工作者
所以综合来说,自由工作相对坐班打工拥有无限的自由度和前景,比远程工作拥有更好的稳定性和更高的天花板,比传统创业风险更低且更有弹性!理想状态是:想出去游玩、逛商场、玩游戏、陪家人、朋友聚会就随时可以;想猥琐赚小钱过生活也不成问题,想扩大规模只不过需要投入更多精力和需要更多的运气而已;
对于自由工作者来说,最重要的好处是可以快速实现时空自由,运气好一些即实现财务自由
举例来说,以下都属于自由工作者范畴
- 远程工 作其实狭义上不属于自由工作,因为除了没有通勤外,压根感受不到自由。是最不自由和天花板最低的自由工作,适合临时顶一顶
- 承接海外远程项目并且获得一定的渠道客户,从而实现专业的应用定制化工作室(类似3R工作室)。当然upwork、众包平台、闲鱼等领任务的不算,那个不叫自由工作叫苦力。正常情况下还不如找个班或者送个外卖来得实在😅。好的客户都是通过流量引进,通过谈判拿下项目,而不是领任务吃残羹冷炙
- 本地三四线城市或者小县城租个办公室开始接本地中小企业或店面的外包。有好几位3R同学在这方面做得非常出色了,包括站长以前也长期从事这方面。但是这个完全靠销售能力,跟"远程"和"技术"已经没啥关系,基本纯靠见面吹了
- 成为独立开发者通过销售你开发的订阅制应用获得长期稳定的被动收入
- 成为平台运营者搭建一个网站或其它自媒体平台,并通过广告与VIP获得长期稳定的被动收入
- 成为知识付费产出者通过学习网课制作销售等获得长期稳定的被动收入以及其他被动收入
- 拥有自己的众包联盟平台和一堆廉价开发者群,从某些平台打出广告无限进单收取利润
- 或者做跨境电商、传统软件二开销售行业等等
- ...
自由工作的种类特别多,但是对于以开发者为主要群体的3R教室社区来说,我们有自己的自由工作界限
下面这些就是3R教室中的"自由工作"范畴
右键->新标签打开图片放大
总体来说,自由工作非常适合具有一定技术能力,但是讨厌打工和内卷。然后通过在掘金课学习一些营销知识和写作技巧、私域技巧、谈判技巧等,再加上一些运气,最终脱离为他人工作和裁员焦虑,实现为自己打工的朋友!
👇再来聊聊这个课程的创作背景或者说3R社区的创建背景(强烈建议点开查看)
站长从07年开始长期学习与从事php、perl、delphi、haskell等技术的编码工作。在2010年之后,虽然当时也尝试了当时新兴的angular.js 1.0和backbone、gulp这些技术,但由于年代限制,所以也没太深度使用,前端部分一直停留在使用jquery、extjs这些老式技术的阶段。直到17年左右,随着时代的发展和大前端时代的到来,接触到了typescript及其相关的react、vue等生态,接着就一发不可收拾喜欢上了。后来通过前端作为桥梁又接触到了node.js领域以及相关的nestjs等生态,发现使用js/ts开发后端也越来越得心应手,编码体验并不亚于php、 python等技术。随着js/ts生态的慢慢成熟和发展以及各种开源生态和企业/商业应用的出现,js/ts的生态在各个领域不断成长和遍地开花。如今的ts的开发领域几乎涵盖绝大多数常见的领域,比较成熟或常见的使用范围大致覆盖以下领域
- 使用react等框架可以开发各种普通web应用以及web3应用、chrome插件的前端
- 使用next.js等框架可以开发SEO友好的SSR网站的前端,甚至轻量的全栈开发
- 使用node.js以及在其之上构建的nestjs、fastify、hono.js等框架可以构建高性能与高可用的应用后端
- node.js也是faas/serverless的最佳后端工具,例如结合vercel就可以极速地上线mvp版本的应用,又比如小程序的云函数开发等
- node.js也适合构建各种命令行CLI工具、区块链以及爬虫等应用,甚至还能在性能不敏感的一些嵌入式应用发挥作用
- 使用electron、tauri等可以开发跨平台的桌面应用,例如新版的QQ、vscode等就是使用它开发的
- 使用react native、ionic等可以开发跨平台的移动应用
- 使用taro、uniapp等可以开发小程序,而原生小程序也是使用JS/TS开发的
- 使用three.js、babylon.js等框架可以开发web 3d应用
现在,大部分的云厂商SDK和AI的大模型提供了完善的node api,除了一些极端关注性能的偏底层应用或数据和代码结构超级复杂的企业级应用外,JS/TS以及Node.js基本都能满足大部分场景的开发需求。也就是说,TS作为JS的类型版本,仅学习这一种编程语言,绝大多数情况下能开发各类应用了
然而,每个技术栈都有其特性
对于web前端而言,无论是spa还是ssr,无论是网站还是各类中后台应用,使用TS开发几乎是唯一选择,因为使用其它如wasm等技术去开发前端目前来说,大多数正常情况下是用不到的。同样地,对于小程序开发来说js/ts也是唯一选择
对于移动客户端和桌面应用来说,虽然在一些性能要求较高且不需要跨平台的场 景下,比如手游,PC系统工具等,还是会选择flutter、kotlin、swift、c#等。但现在越来越多的性能和包大小不敏感的应用都会选择TS来解决。比如京东app会使用到react native,腾讯QQ会使用electron... 而react native、electron等框架本身的生态也是已经相当成熟了,各类使用这些技术栈的商业应用层出不穷
对于后端应用而言,node.js相关的各种框架和ORM以及中间件SDK的出现,使得其越来越受新时代开发者的喜爱。这不仅仅只是由于其简单易上手的特性,更是因为他可以与前端一起使用一种语言进行同构,在生态上可以无缝整合。现在,大部分的云厂商SDK和AI的大模型提供了完善的node api,除了一些极端关注性能的偏底层应用或数据和代码结构超级复杂的企业级应用外,JS/TS以及Node.js基本都能满足大部分场景的开发需求。也就是说,TS作为JS的类型版本,仅学习这一种编程语言,绝大多数情况下能开发各类应用了。但node.js相对于其它技术栈也有其自身的优缺点,没有一种技术是万能的,我们来看看他与其他技术栈的对比
- 与php相比,虽然异步IO的性能相对于原生的php-fpm(swoole、workman等除外)更强一些,虽然生态上还是缺乏一些类似wordpress这种成熟的开箱即用的开源产品。一众node.js框架也远没有达到laravel、symfony这种完善度。但node.js有着前后端一体化的优势存在,是当下以及未来的php最完美继承者
- 与python相比,node.js更适合web后端开发,而在AI大模型和科学计算方面等领域虽然不如python,但在爬虫、运维工具、命令行工具等开发方面并不弱于python。而web后端方面,则在性能、便捷性等全方位优于python。且node.js的一众框架也并不输于fastapi、django等框架,还有前后端同构的优势,所以,如果后端开发在python和node.js之间选择,毋庸 置疑,肯定选择node.js
- 与go相比,node.js这种解释性引擎不仅在性能上远弱于即使带了gc的golang,同时,在微服务方面也是非常勉强的。node.js更加无法像go一样胜任云计算的底层开发。而node.js前后端一体化易于部署和开发,适合作为go和rust前中期的替代、轻量级的hono.js、fastify等框架也方便在项目高速发展期把后端随时替换成go或rust与微服务架构以适应业务需求。可以在学习node.js之余,学习rust,因为它在很多场景下用来做node.js的基建。也可以研究golang,因为在后期你可以忽略不计开发成本,不需要前后端一体时,golang明显就是node.js的升级版!
- 与java相比,node.js的生态几乎是被吊打的。php拥有着非常完美且成熟的开源生态圈,而java则是拥有一个完整成熟的商业生态圈。一个spring全家桶几乎是无敌一样的存在,且nestjs在开发复杂数据结构的企业级应用方面也是无法与java这种重量级的生态相比的。java非常强大,拥有者良好的生态,性能中上、适合具有复杂的架构和数据结构的企业级项目,适合团队协作等等优势。但Java在求职和变现方面的"卷"和开发效率的"慢"(就算spring boot,开发中小型的效率也是如此拉胯)是出了名的,所以没必要说太多
- 与.net相比:.NET同样也可以前后端一体化且性能方面也比node.js更出色,就算远程/海外/外企求职等求职领域也不输node.js。然而node.js的前后端一体化更加全面,且生态方面更加开放和完善,并且使用者数量也多。另外,把自己的技术栈局限于一家公司之内,也许并不是很好的选择
node.js和前端一体化同构以及所有厂商云函数的优先级等巨大的优势是其它所有技术栈无法媲美的。所以,综合来说,node.js作为后端运行时,更加适合于初创期的团队或独立开发者用来构建快速上线的轻量级MVP单体应用。在许多情况下,用来可以用于替代php和python等解释型语言
比如,使用next.js作为前端,使用hono.js这个node.js作为后端,使用route handler整合后,快速上线一个前后端一体化的web应用。后续随着用户量和并发要求的不断提高,在一个合适的时间段,把后端部分使用golang的gin或者go-fiber等框架或者微服务架构进行重构
又比如,使用nestjs+vite+react+monorepo模式开发一个快速上线的中后台应用,然后在后续数据结构越来越发杂,应用规模越来越大时,可以使用spring boot来替换掉nestjs进行重构
总之,node.js作为后端的定位,并不是企业级或者微服务。而是与前端一体化同构,快速上线一个轻量级的应用。从而降低开发成本,让研发者把更多的时间和精力放在产品本身的运营上
除了技术层面的优势,在求职、变现和创业方面,TS全栈开发也表现不俗
比如在求职这块,如果你的目标是求职大厂后端,node.js后端显然不适合,只学习TS的纯前端部分技能即可(许多大厂也会选择node.js作为中间层转发请求)。不过求职大厂,跟技术关系不大,最重要的还是学历😄。而TS全栈相关的react、next.js、node.js等技术栈在求职领域的主场则是在
- 远程工作
- 外企求职
- 海外工作
- 和国内一些新兴的创业团队等方面
在这些岗位中是占有绝对的需求数量优势的
尤其是远程工作和海外工作方面, TS的岗位需求量几乎占据了近一半以上。从3R这个封闭式的小社区来看,也经常会有比较多的远程岗位和海外本地岗位是ts相关技术栈的,而一些专业提供远程工作的社区或海外的招聘网站则往往有多得多的ts相关的远程岗位
社区内有很多会员都从事着远程工作和远程办公,因为最初3R社区只是一个数字游民的付费学习和交友社区,后来才有越来越多的纯自由工作和创业者的融入。远程工作方面,目前来说比较具有代表性的如@愧怍
同学(base 25k+股权的美国远程工作,技术栈:next.js+vercel ai开发)、@MArtian
同学(base 未知+10%股权的澳洲远程工作,技术栈: next.js+wordpress)等
再则TS全职在外企求职、国内大厂和新兴创业团队甚至国企这种传统企业求职中都占有一席之地,且由于其便捷性和低成本等特点,国内企业对这方面的人才需求也是与日俱增
而在创业或者自由职业方面,这套技术栈由于其不断成熟的生态、前后台一体同构、性能表现良好、覆盖领域广等优势,使得能快速上线一块不错的产品,也方便随时根据自己的idea不断调整,正在成为个人开发者及初创团队的最爱。非常适合
- 个人或远程协作小团队的外包接单工作室
- 独立产品开发者
- 需要快速上线以验证市场的MVP产品
等工作。比如,我们工作室的绝大部分外包项目几乎都是ts全栈开发的,详情可参考工作室页面
在独立开发方面,TS全栈更是几乎无敌的存在,基本覆盖了所有常见领域的快速开发,可以把大部分时间放在推广和运营上。3R许多独立开发的同学基本都选择react、next.js、node.js这些技术栈来开发自己的应用,比如@王小C
同学的知识管理应用、@勇敢的心bbk
同学的音乐app等就是很好的例子。使用next.js开发并在极端的时间内上线,然后把精力放在宣传上并获得大量的用户上
所以TS全栈开发不仅非常适合现阶段学习,在未来也适合作为主力技术栈为你的编码生涯提供助力的,这也就是我们出这套课的原因所在
但是,往往只从事技术开发,会导致思维限制。因为纯技术从事者,很难去形成一个属于自己的稳固事业,也无法获得一名程序员应有的收入。由于绝大多数编码工作者所从事的工作并不是稳定的国家编制单位,而是一众私企。那么即使求职成功,也可能长期处于担心被裁的焦虑中。这是因为私企肯定是逐利的,这种现象是无可厚非的。而在站长看来最好的解决办法就是自由工作。即使有再多的垄断型大厂,高科技企业于打工者而言是没有任何意义的,我们要的并不是集中力量办大事,最后把自己给办了。但如果大厂越来越少,而一部分程序员尝试自己经营小个体户,小微低成本企业越来越多(比如自己写一款销量好的应用实现被动收入甚至拉到投资;拉几个网友成立一个远程工作室接一些创业型的高价外包;或者纯粹一个人卖课等等方式),从而形成属于自己的稳定事业,就不再需要太过担心裁员,失业等现象的发生。即使在生意不好的阶段,也能临时找份远程工作搞一点收入顶一顶或者攒点资金方便下一次创业。这就是站长所推崇的自由工作的逻辑
长期以来,在创作课程的同时,站长也会根据自己十多年的自由工作和小微创业经验经常会分享一些方法和思路。另外,随着3R教室本身资源的不断增加,我们也有了一个可以为大家提供优秀资源的圈子。所以,除了技术课程及相关问答服务之外,我们提供了"变现课"、"社区资源互助"等一些其它额外的内容和服务项以帮助大家学以致用!
☕️介绍
当前介绍为3R课程2025版新课程《TS全栈开发与自由工作实战》的内容,旧课《Nestjs最佳实践》在本页最后的折叠中,有兴趣自行打开查看
新课程由《TS全栈开发与自由工作实战》由技术课和变现课两部分组成,是3R教室为即将到来的三周年运营纪念带来的里程碑意义的一份永久更新的技术和变现学习资料
为了适应日益变化的市场需求和跟上JS/TS生态的更新换代,我们于2024年9月开始策划并开更一套新课程,并在2025年全新调整后重构上线。旧版课程以Nestjs框架为主,外加一些React中后台开发的相关内容,定位于企业级TS全栈开发。旧课的教学目的在于提升会员在远程工作/外企/海外/新兴创业企业等方面的求职能力,所以绝大部分内容是围绕后端node.js企业级开发所开展的。而经过几年的发展,3R教室会员的学习目标变得越来越多样化。有因为纯兴趣爱好想学习的,也有想成为自由工作(独立作品开发/外包项目接单/知识付费等)或创意工作者的同学。许许多多的新3R会员并不都完全以求职为目的,这也使得旧版本的技术课必须要推倒重来以兼顾多方面的需求
新版课程为了让更多的会员具备快速独立开发和变现的能力,会更加侧重于轻量级全栈开发。新课不仅包含了最新最容易变现的海外/远程市场为主(兼具国内市场)的TS技术栈的深度教学,并且取消了原来的《远程掘金课》的独立课程方式,而是以变现课的篇章与技术课合并为一个课程。同时,新课的技术课方面不仅仅只专注于node.js后端开发和运维了,也增加了大量前端技术的内容
具体到目前已经在更新和计划中的内容,则是以TS全栈技术开发内容为主(后续简称"技术课"/"全栈课"),额外增加站长和其他会员的自由工作经验的变现课(原《掘金课》),使得我们在学习技术时,可以真正地尝试利用技术实现变现的实践和探索
技术课以TS全栈开发为核心,主要包含react、next.js、node.js、hono.js、nestjs、AI大模型应用整合开发、服务器运维和部 署、serverless等知识与技能。且后续随着时间的推移,我们会不断地增加更多有用的课程,比如桌面应用开发(electron)与移动应用开发(React Native+Expo)等内容
而变现课内容则围绕自由工作者的职业成长和变现实践展开,涉及商税知识、推广营销、远程谈判、被动收入等多方面的知识点,为利用技术实现变现目标提供参考
整个课程的内容是环环相扣的,比如TS全栈开发部分的前期板块内容是使用next.js+hono.js写一个cms网站系统。此网站麻雀虽小,但五脏俱全,几乎涵盖了大部分react前端和node.js后端开发的常用生态和知识点。学习后基本上能达到独立开发或远程工作/外企单位/海外求职的水平的,开发后的CMS网站修改后亦可作为自己的个人网站上线。然后结合该部分内容学到的web开发知识,自己再开发一些作品(因为TS都是想通的,所以利用学到的TS知识不仅可以开发web应用,也可以自行研究一下RN或者Electron来开发一些移动或桌面应用)。而技术课的后半部分则是对这个网站系统不断地扩展,成为一个多用户权限的社区系统。这部分内容不一定要完全学习,在开发自己应用的时候正好遇到这部分课程里涉及的章节,按需查询学习即可。这之后,你可以结合的变现课部分的知识点,开始对求职、独立开发、创业的进行实践!而TS全栈第二部分的nestjs企业级开发(旧课升级后添加进去)则对于专注于求职需求的同学增加了更多面试时拿下offer的机率
新版课程与旧版课程的区别,大致如下
后续在时间允许的情况下,我们会把旧课升级并作为单独篇章添加到新课中,这样大家也能学习最新版本nestjs框架的企业级开发
TS全栈开发及自由工作实战(新版) | Nestjs最佳实战(旧课) |
---|---|
TS全栈开发技术课+自由工作变现课 | 纯技术课(原《远程掘金课》独立) |
技术栈:react、next.js、hono.js、运维部署/cicd、ai/serverless应用开发等 | 技术栈:react、nestjs、typeorm、运维部署/cicd等 |
方向:中高端岗位求职、独立作品开发、外包接单、业余爱好与兴趣学习 | 方向:高薪远程/外企/海外工作的求职 |
侧重点:轻量级TS全栈开发为主,后续可能会升级旧课的企业级开发内容并添加至新课中 | 侧重点:企业级TS全栈开发 |
项目:从开发一个全栈个人博客网站起步,通过一步步演化,最终实现一个强大的CMS和社区系统 | 项目:开发一套类似无头CMS的通用中后台管理系统 |
目前重点更新和推荐的是新课,而旧课暂时处于维护期,也可以学习
至于为什么要把新课的主技术栈替换成轻量级开发的原因,可以看这里👇🏻
为什么要改版课程?
首先,我们需要明白,node.js在后端开发方面的定位(因为前端部分不用考虑,99%以上都是js/ts开发)。node.js虽然拥有IO异步、高并发、多线程、cluster集群等优点。但最大的优点还是前后端一体化,即和前端柔和在一起共用类型(ts)、函数、生态等。正常情况下,不是特别秀逗不会去使用node.js写微服务、超大型复杂企业级项目的后端。因为超高性能的后端领域是属于rust和go的,而超复杂企业级项目的后端领域是属于java的。我们不能使用一个技术去做他不擅长的领域。所以,自然而然,得出node.js作为后端的擅长领域以及定位:开发需要快速出产并且对性能有一定要求的中小型单体应用
- 相对于php:有着前后端一体化及性能碾压传统fpm(也不亚于swoole、workerman)的优势存在,是php的最完美继承者(但是node.js生态目前相对php还有差距的)
- 相对于go和rust:前后端一体化易于部署和开发,适合作为go和rust前中期的替代、轻量级的hono.js框架也方便在项目高速发展期把后端随时替换成go或rust与微服务架构以适应业务需求。可以在学习node.js之余,学习rust,因为它在很多场景下用来做node.js的基建。也可以研究golang,因为在后期你可以忽略不计开发成本,不需要前后端一体时,golang明显就是node.js的升级版!
- 相对于java:java非常强大,拥有者良好的生态,性能中上、适合具有复杂的架构和数据结构的企业级项目,适合团队协作等等优势。但一个字否定:"卷",再加一个字:"慢"(就算spring boot,开发中小型的效率也是如此拉胯),所以没必要继续分析了
- 相对于python:专业领域不一样,node.js做不了AI,python做web还不如php。唯一的交集可以一起做爬虫😅
- 相对于.NET:毋庸置疑,.NET好许多,全方位的可以吊打node.js。就算远程/海外/外企求职等求职领域也不输node.js,但架不住node.js可以和前端整合一起玩
站长作为十几年的老码农(专注于delphi、haskell、php、jquery方面的开发),17年因为想使用前后端一体化开发,又会 一些rust(rust和node.js基建有一点关联),然后机缘巧合下就转了TS全栈。一直想找一套既拥有php symfony/laravel框架的快速开发体验,又兼具js/ts和node.js生态的IO异步、高并发和前后端一体化的开发组合。实践过大量的方案,比如nestjs+monorepo、react、trpc等,但都不是很理想。虽然有些方案比较接近目标了(旧课中提供了大量的方案),但都是通过各类魔改、自定义命令等乱七八糟的hack方式强硬实现的,维护难度极大且影响开发体验。而尝试过next.js+server action+hono.js+prisma.js之后,站长明白,契机来了。这套技术栈可以认为是目前唯一的php最佳新生代替代品。。。几乎兼具了所有轻量级快速开发和高性能的优点
相对于旧版的nestjs+react全栈开发课来说,这套课或者说这套技术栈有着非常多的亮点,比如
- 十分轻量:next.js、hono.js、prisma orm都是轻量级框架,非常适合开发中小型项目
- 简单易学:不需要太多的后端基础或前端经验,也没有太多的抽象和逻辑。边学边做即可掌握,有种现代版PHP的既视感
- 开箱即用:不需要去手动搭建并不断调整monorepo这种多层次的架构和类型、库共享等方面,也不用像纯react那样自己去封装前端路由,没有多少心智负担
- 体验优秀:这套技术栈就站长当前的实践来说有着非常良好的开发体验。目前而言,虽然hono这类新兴的微型node.js框架的生态没有nestjs等一些老牌大型框架成熟。但也在不断发展并且已经有许多生产级别的项目在使用了。另外,由于是新框架,完全没有nestjs这类的历史包袱。如hono天然就支持各种serverless平台、支持esm、针对bun优化、超高性能和并发支持等等。最重要的是和next.js无缝整合,用于替代next.js默认的server action模式
- 性能强劲:hono.js作为轻量后端框 架,由于其原生支持bun并且不做路由检索以及内核很小等原因,性能和并发支持在所有node.js框架中是顶级的存在(相对而已,nestjs即使用fastify适配器,也是没法比的)
- ...
除了技术层面,这套技术栈在自由工作和求职等变现方面同样是非常适合和优秀的
- 独立开发者而言:该套技术栈非常容易掌握,开发效率和一体化程度也很高,特别适合快速实现自己想要的作品投入市场并做后期迭代
- 外包项目(这里的外包专指海外客户和创业项目客户):开发效率、维护及二开难易是首要考虑的,另外,并发测试数据的漂亮也很重要,而这套技术栈全部满足
- 求职方面:next.js+node.js全栈开发的岗位需求数量非常多(包括远程工作、国内创业企业、外企以及海外本地offer也很多),就3R这么一个小社区的资源群,也经常会有这类招聘需求
关于旧课《Nestjs+React最佳实践》
原来旧课中除了重点的nestjs框架后端开发的教程之外,早期还制作了一些react+vite中后台开发的课程,并以站长编写的中后台应用toomejs作为基石进行整个react后台面板的开发讲解。但是随着时间的推移,很多事情在不断变化,2024年的情况与2022年已经变得完全不同。首先,无论远程还是坐班工作,无论国内还是海外,纯前端的工作(尤其是中后台开发类)变得越来越卷。这是因为,有越来越多或个人的或企业的开源中后台方案可以选择,根本不需要你去开发。就拿3R教室这个小圈子来说,有很多会员同学在原来react课程源码-toomejs这个面板的基础上,开发出了一堆开源的后台面板。大部分时候,如果对自己开发后台感兴趣,仅需要学习一下react或vue,然后下一个别人开源的后台面板,研究一下代码就知道编写的思路和 方法了,然后改一改就变成自己的了^v^。而很多所谓的TS工作,尤其薪资高一点又不是特别卷的,基本都侧重node后端领域的深度,对B端的中后台领域都仅限于使用现成的开源改了。或是rn、next.js这种千变万化的C端的前端及客户端领域了。这使得,后台管理这一部分的课程显得如此的无足轻重
再来说分析一下nestjs。相对于node.js这种更适合轻量级的后端开发来说,nestjs强制性走了一条不适合它的道路。用了大量反射、容器、依赖注入等方式来构建框架,非常笨重。站长认为node.js对于后端的定位应该是类似一个青春版的golang。也就是在不需要上微服务和超高性能时,使用node.js构建轻量级的单体应用后端无可厚非。一旦业务流上去了,则适合使用golang替换。然而无论golang或者node.js,都比较适合现代化后端开发。现代化后端开发最流行的都是轻量级开发框架,比如gin、echo、gofiber、express、koa、fastify、hono.js、elysia等等。而nestjs尝试去走一条本就不适合node.js的企业级开发之路。这个领域在国内向来应该是属于Java的,在海外也基本属于Java和.NET两者的。在一些性能要求不高的项目中,就连PHP都比node.js更适合去做企业级开发(毕竟有laravel、symfony等一系列成熟的生态),nestjs做了本该不是node.js做的事情。甚至它还支持微服务,这就更不属于node.js的领域了,用golang做不好吗?所以,长期以来nestjs处于什么都想支持,但是什么都支持不到位的一个半成品的尴尬境地。需要正经使用,必须要做大量的魔改和订制。比如,他的配置模块几乎不是人类可以使用的,所以站长为了提升大家的开发体验,不得不在课程里自行开发一个配置模块。与各种ORM的匹配(比如课程里的typeorm)也是随便一搞,根本没有深度整合,甚至根据动态配置实现数据迁移等都需要自己魔改。虽然站长在课程里都写了解决方案,但是,这样大的心智负担和学习曲线,去学习和使用一个本不属于它自己领域的技术,这应该并不是使用TS一种语言做全栈的初心所在了。另外,Nestjs框架由于其生态的历史包袱原因,官方无法完全支持ESM,也无法默认支持bun(虽然课程里站长都经过魔改支持了,但肯定不如官方支持的框架)。这就导致很多新兴的js/ts生态无法使用,以及性能方面的各种问题。还有最麻烦的是与前端的一体化整合开发方面,课程里使用的pnpm workspaces+turborepo的monorepo方案,但这种方案的确非常恶心,因为你需要关注的东西不断增加。比如turborepo升级后API改了,比如你想用bun了,比如前后端通讯使用trpc和rest之间纠结等等
但从3R社区两年的运营经验来看,在求职方面,掌握nestjs的优势显然比next.js加其他node.js框架求职成功的概率高出许多。站长发现,许多会员同学使用站长的nestjs+react课程找到了心仪的工作。有远程、有外企也有海外同学的在当地找到的工作,甚至还有用这套求职国企成功的
这也是站长打算继续保留React+Nestjs中后台开发这套课程的原因。根据大部分求职成功的会员同学的反馈,使用React+Nestjs求职的流程和模式大概是这样
- 在3R资源群或者其他社区或平台上发现Node.js招聘岗位,但绝大部分并没有特别指定要求掌握Nestjs,反而对前端React会有"熟练掌握优先"的关键词
- 开发者去面试,由于使用node.js的面试和笔试的远程/坐班(外企、创业团队、海外企业为主)大概率不会像Java一样有一堆八股,极少涉及算法方面,一般只看你掌握的深度。而Nestjs代表了Node.js在web后端开发领域的企业级标准也是最强大和复杂的框架。所以熟练掌握Nestjs框架,并且还自己开发的中后台面板搭建了一套自己的中后台管理系统。然后对各方面掌握的比较熟练,面试的时候非常容易脱颖而出。笔试基本就是做个小案例,用nestjs做出来远比其它node.js小框架做出来更容易得到认可
- 反而入职后,让你使用的后端框架大概率会是express、koa、fastify这类或过时或非常简易的微框架
以上流程是站长咨询了非常多的从事node.js全职开发的会员得出的结论,即:面试造飞机,入职打螺丝。但无论入职后用什么,能否入职才是最重要的,而nestjs几乎成为入职node.js的敲门砖了。因为next.js这种以前端为主并且封装好路由的全栈框架以及fasfity、hono.js这种微框架太过简单,以至于太容易学会。这样导致了,虽然react前端、node.js后端、js/ts 全栈的岗位看似很多,薪资也挺高,但会这套的人更多,卷得一批(这也是上面说的新课更适合自由工作的原因)。而nestjs更像是java那一套,非常强大,但又没有java那么成熟。所以很多东西需要自己魔改、封装,对开发者的技术深度和动手能力要求极高。这就在求职市场上大放异彩了!
但无论怎么说,node.js更适合于中小型应用的后端开发,以及与前端的一体化。总而言之,言而总之,nestjs并不符合node.js的定位,也无法跟上时代的潮流。同样的,react+react router自己封装后台,也并不实用,需要经常维护更新,一般人没这个精力。但他两在js/ts和node.js的前端、后端、全栈求职领域,仍然是王者的存在
综上所述,这就是我们仍然计划后续可能重构一套"升级版"旧课追加到新课中的目的,但没有百分百确认,视时间而定,此课程的优先级肯定会比较低,目前计划是在2025年下半年开始编写。但如果你对react+nestjs全栈开发/中后台开发感兴趣,也可以直接学习我们的旧课
🗝指南
一个良好的学习方法,总能达到事半功倍的效果。所以尽量按站长推荐的学习方法和流程学习本课以及正确的使用社区,具体步骤如下
一、提前准备
请务必先学习一下git的安装配置和基本使用以使用我们的课程源码
这里说明一下,如果可能的话,最好能有一台macos系统的电脑,这样可以和课程代码的运营环境保持一致。但是如果没有mac,也可以在windows下安装wsl2或者直接装个linux系统来学习。最好不要直接在裸win中装node来跑代码(尤其bun这种工具),后续问题会比较多
如何你是零基础或者其他技术栈的开发者,请在学习本课前请提前学习以下资料
- html5菜鸟教程和css3菜鸟教程
- typescript入门教程
- react官方教程(仅学习起步部分即可)
- postgresql入门教程
- 阮一峰的es6教程和typescript教程以及node.js中文网教程可供查询之用,不必完全学习
二、学习流程
👇不会使用git克隆的同学请看以下步骤
在windows下必须安装wsl2,下面所有linux操作包含Debian系的Linux发行版(Redhat或者Arch系的大同小异)和windows下的wsl2 linux子系统
在windows下所有执行的命令,都是打开windows terminal 进入 wsl子系统后执行的.非要在windows宿主机中打开git bash或者powershell去执行命令遇到的一切问题不做解答,请自行负责!
MacOS系统
- 下载安装iterm2(一个比苹果自带的terminal更好用的命令行工具)
iterm2
执行/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
命令安装brew(一个包管理工具) 3.(可选步骤)可以自行按需配置iterm2
使他变得更好看,怎么配置请自行谷歌搜索,不配置也不影响使用- 执行
brew install git
以安装git - 下载并安装docker桌面版,请尽量在(设置 -> General)里设置开机启动,以免开机后手动启动
Windows系统
- 打开App商店的Windows Terminal,点击"install"按钮安装Windows Terminal
- 打开Windows Terminal,点击标签栏的向下箭头按钮选择"Windows Powershell"
- 输入
wsl --install
以安装wsl2 - 关闭windows terminal并重新打开,点击标签栏的向下箭头按钮选择"ubuntu"子系统(即进入wsl)
- 在wsl子系统中先执行
sudo apt-get update && sudo apt-get upgrade -y
升级包,然后执行sudo apt-get install -y git
命令以升级系统包和安装git - (可选步骤)可以把wsl作为windows terminal默认打开的窗口以及做一些其它的美化,请自行谷歌搜索"windows terminal配置"等
- 下载安装docker桌面版,并整合wsl(点击顶部的设置图标 -> Resources -> WSL integration),请尽量在(设置 -> General)里设置开机启动,以免开机后手动启动
Linux系统
你都这么屌了,我就不多说了(建议manjaro系统) 先安装docker,桌面发行版安装docker desktop,远程服务器安装docker EC 然后安装git
sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install -y git
# redhat系,fadora/centos等
# sudo yum update && sudo yum upgrade -y
# sudo yum install -y git
# arch系,manjaro/arch等
# sudo pacman -Syy
# sudo pacman -S yay
# yay Syu
# yay -S git
克隆仓库
新手请注意:这里的~
符号是默认指向用户目录
一、生成ssh key 打开命令窗口,执行以下命令,不停按回车生成,不要输入密码什么的
ssh-keygen -t rsa -C "随意填一个邮箱地址"