回顾使用 Node.js 的一年以及为什么我应该坚持使用 Laravel
今年早些时候,我花了两个月时间构建一个全栈 JavaScript 应用。我使用了 Express 服务器,设置了 Next.js 用于服务器端渲染,添加了 Chokidar 用于服务器即时重新加载,使用 Next.js 的 Webpack 配置编译了服务器的 TypeScript 代码,使用 Argon2 加密连接了 Cookie 身份验证,找到了完美的 Node ORM,并将应用分别运行在 Node、PostgreSQL 和 Redis 的独立容器中。
经过两个月的努力,我最终构建的只是一个平庸的服务器渲染的CRUD应用程序,用了二十几个NPM库拼凑而成。如果我用的是Laravel和jQuery,一个周末就能搞定这一切。
在构建 Node.js 应用一年之后,我发现自己花在拼凑工具上的时间比编写应用程序代码的时间还多。Laravel为我提供了 80% 的开箱即用工具,而我只需完成 20% 的工作。如果快速开发对你来说很重要,那么你应该优先考虑像 Laravel 和 Rails 这样功能强大的框架。
全栈 JS 未能兑现的承诺
全栈 JavaScript 的倡导者们鼓吹,开发人员只要使用一种语言,并在应用程序的前后端共享代码,就能提高工作效率。我花了一年时间追逐这个梦想,却从未真正享受到它承诺的好处。
虽然 Node.js 和 ES6 都是 JavaScript,但它们的实现方式却截然不同。Node 一直以来都无法很好地兼容 ES6 模块,这意味着您必须将 ES6 代码编译为 CommonJS 才能在服务器上运行。配置 Webpack 和其他打包工具是一套与应用程序开发完全不同的技能,并且可能需要数天时间才能正确设置所有内容。像 Next.js 这样自成一派的工具稍微缓解了这种痛苦,但它的无服务器优先方法在实现服务器环境中的标准功能(例如使用文件系统)时可能会显得有些局限。
我原本希望只使用一种语言,至少可以避免切换上下文,从而提升速度,但结果却把时间都浪费在了浏览器里无数个第三方包文档标签页之间。Node.js 并没有像 Laravel 那样拥有社区拥趸的杀手级后端应用。相反,它有众多框架争夺这一位置,但都没有显著的采用率或发展势头。为了降低选择一个可能消失的框架的风险,许多开发者使用 Express.js,并围绕它搭建应用程序。不幸的是,这种方法会让你面临无数的抉择。你会使用什么 ORM 或 DB 驱动程序?Cookie 身份验证还是 JWT?哪种加密算法最好?应该使用哪个库进行数据验证?
所有这些决定都可能需要一周时间才能完全理解其影响,而你本可以趁此时间开发你的应用程序。这简直是被千张纸割伤了。
Laravel:快速完成应用程序开发
Laravel 是一个极其高效的应用平台。它具备所有你期望的“功能齐全”框架应有的功能:路由、ORM、中间件、身份验证、验证、迁移和测试(仅列举部分功能)。此外,Laravel 还拥有两个其他全栈框架所不具备的杀手级特性:充满活力的第一方软件包生态系统和详尽的文档。
Laravel 拥有用于计费的 Stripe 集成。该框架包含一个集成,供用户使用社交 OAuth 登录。Laravel 拥有自己的应用程序脚手架、预配置的 Docker 环境、强大的队列系统,如果您愿意额外支付一些费用,还可以获得托管的 Laravel 部署和精美的应用程序仪表板。
Laravel 的第一方付费模块是一个差异化因素:它的付费产品使其成为一个能够自我维持的企业,拥有全职员工,可以维护第一方软件包并处理文档等方面的细节。
Laravel 的文档或许是其最强大的功能。虽然许多文档网站都显得枯燥乏味,但 Laravel 的文档设计却明亮而引人入胜。文档组织有序,且各个页面的风格保持一致。文档还具有即时全文搜索功能,支持拼写错误,不仅能将您引导至正确的页面,还能将您引导至页面的相关部分。
Laravel 强大的原生集成和优质的文档让您可以立即着手构建应用程序。无需比较六种最流行的 Node.js ORM,只需使用 Laravel 自带的 ORM。无需研究所有通过社交资料验证用户身份的方法,只需使用 Laravel 的原生软件包。所有框架的文档都集中在一个地方,而不是分散在十几个网站上。遇到挑战时,您可以利用整个 Laravel 社区,而不是依靠与您使用相同库的少数人。
我学到了什么
我所学到的是,如果你想快速开发应用程序,那么并不意味着只使用一种语言:而是要找到可以让你快速行动的工具,无论它们是什么。
我使用 Laravel 是因为它能让我快速构建服务器端应用。我的大多数前端 Web 应用都使用 React,而 Laravel 则提供了快速启动后端所需的工具。在注重 SEO 的网站上,我可以将服务器渲染的 Laravel 网站与 Vue 小部件搭配使用,以增强网站的交互性。Laravel Mix 的零配置打包功能让项目资源的编译变得轻而易举。
我不再在前端和后端之间共享代码,而是将几乎所有业务和验证逻辑都转移到后端,并通过 API 在前端使用。即使使用两种不同的语言,也并不意味着你需要编写两次相同的代码。
我更喜欢 Laravel 而不是 Node.js,因为它可以让我快速行动。
临别感想
我本可以最后说一句“用对工具做事”,但我觉得这不太合适。相反,你应该使用你手头上最快、最高效的工具,快速上线应用,并从用户那里获得反馈。对于一些开发者和一些项目来说,Node.js 就是他们的理想工具。然而,对于那些已经精通 Laravel、Rails 或 Django,并希望使用全栈 JavaScript 来加快开发速度的人来说,我要提醒你,你可能会浪费一年时间去拼凑自己的框架,而你的投资最终却收效甚微。
文章来源:https://dev.to/tylerlwsmith/reflecting-on-a-year-with-node-js-and-why-i-should-have-stuck-with-laravel-e5a