Wasp - 用于开发无样板的全栈 Javascript Web 应用程序的语言

2025-06-07

Wasp - 用于开发无样板的全栈 Javascript Web 应用程序的语言

在过去的一年半里,我和我的双胞胎兄弟一直在研究Wasp:一种用更少的代码开发全栈 Web 应用程序的新编程语言。

Wasp 是一种简单的声明性语言,它使开发 Web 应用程序变得简单,同时仍然允许您使用React、Node.js 和 Prisma等最新技术。

在这篇文章中,我将与您分享为什么我们相信 Wasp 会对 Web 开发产生重大影响、它是如何工作的、我们现在处于什么位置以及未来的计划是什么!

为什么是 Wasp?

您知道如何使用 React,了解 HTML/CSS/...,知道如何在后端编写业务逻辑(例如在 Node 中),但是当您想要构建一个实际的 Web 应用程序并将其部署供其他人使用时,您会被所有细节和额外的工作所淹没 - 响应式 UI、适当的错误处理、安全性、构建、部署、身份验证、在客户端管理服务器状态、管理数据库、不同的环境......

Web 开发的冰山

Jose Aguinaga 在他的博客文章“2016 年学习 JavaScript 的感觉如何”中以有趣的方式描述了 Web 应用程序开发的意外复杂性,四年后的今天,这篇文章仍然具有现实意义。

我们构建 Wasp 是因为尽管我们都是经验丰富的开发人员,并且曾经使用各种技术(JQuery -> Backbone -> Angular -> React、自己的脚本/makefile -> Grunt -> Gulp -> Webpack、PHP -> Java -> Node.js,...)开发过多个复杂的 Web 应用程序,但我们仍然觉得构建 Web 应用程序比它应该的要难,因为这个过程涉及大量的样板和重复性工作。

我们的主要见解是,虽然技术堆栈不断快速发展,但应用程序的核心要求大多保持不变(身份验证、路由、数据模型 CRUD、ACL 等)。

正因如此,大约两年前,我们开始思考将Web 应用的规范(它应该做什么)与实现(它应该如何实现)分离。

这促使我们萌生了将常见的 Web 应用功能和概念提取到一种特殊的规范语言(Wasp)中的想法,而实现细节则仍然通过现代技术栈(目前包括 React、Node.js 和 Prisma)进行描述。

我们对 Wasp 的愿景是创建一种强大而简洁的语言,让您能够尽可能人性化地描述您的 Web 应用
我们希望让上图中的冰山一角尽可能美观,同时让底部更小巧。

使用这种语言,只需几句话,您就可以指定页面及其路由,指定所需的身份验证类型,定义基本实体/数据模型,描述基本数据流,选择部署位置,在 React/Node 中实现特定细节,然后让 Wasp 负责连接、构建和部署所有这些。

Wasp 示例代码

点击此处查看完整示例。

为什么语言(DSL)和框架还没有解决这个问题?

框架(例如 Ruby on Rails 或 Meteor)给了我们很大的启发。
然而,我们希望更进一步——通过设计一种专门针对 Web 应用领域的语言(DSL),我们可以摆脱许多样板代码,提供更简洁、更清晰的开发者体验。

另一方面,我们并非试图用 Wasp 取代一切,也不认为这有任何意义——恰恰相反,Wasp 充当了 React 和 Node.js 代码之间的“粘合剂”,让您免于繁琐的工作,同时又能保持编写自定义代码的灵活性。
大部分代码仍然使用 React 和 Node.js 编写,而 Wasp 则作为整个应用程序的骨干。

DSL 的另一个好处是,它允许 Wasp在构建期间了解 Web 应用程序的要求,并在生成最终代码之前对其进行推理,这是我们特别兴奋的。

例如,在生成要部署到生产环境的代码时,它可以根据对 Web 应用的理解选择最合适的架构,并将其部署到无服务器架构或其他类型的架构(甚至是两者的组合)。
另一个例子是,在 Wasp 中只需定义一次数据模型逻辑,即可在堆栈的所有部分中重用该逻辑。

DSL 为优化、静态分析、可扩展性和无与伦比的人体工程学开辟了潜力。

它是如何工作的?

Wasp 编译器将 .wasp/React/Node.js 源代码编译为 React/Node.js 目标代码。

目前,Wasp 仅支持 JavaScript,但我们计划很快添加 Typescript。

技术说明:Wasp 编译器使用 Haskell 实现。

Wasp编译图

虽然目前仅支持 React 和 Node.js,但我们计划在未来支持多种其他技术。

生成的代码易于阅读,并且易于检查,如果 Wasp 的限制过多,甚至可以将其弹出。
如果没有弹出,您无需查看生成的代码 - 它由 Wasp 在后台生成。

Wasp 通过 CLI 使用wasp- 要在开发中运行 wasp 项目,您只需运行wasp start

Wasp CLI 输出

黄蜂现在在哪里?它要去哪里?

我们的远大愿景是将尽可能多的 Web 应用领域知识转移到 Wasp 语言本身中,从而赋予 Wasp 更强大的功能和灵活性。

最终,由于 Wasp 对 Web 应用程序的需求有如此深刻的理解,我们可以在其上生成一个可视化编辑器 - 允许非开发人员与开发人员一起参与开发。

此外,Wasp 不会与特定技术绑定,而是支持多种技术(React/Angular/...、Node/Go/...**。

Wasp 目前处于 Alpha 阶段,一些功能仍然很粗糙或缺失,有些问题我们还没有解决,其他问题可能会随着我们的进展而改变,但您可以尝试一下并构建和部署 Web 应用程序

Wasp 目前支持的内容:

  • ✅ 全栈身份验证(电子邮件和密码)
  • ✅ 页面和路由
  • ✅ 模糊客户端和服务器之间的界限 - 定义您的服务器操作和查询并直接在客户端代码(RPC)中调用它们!
  • ✅ 服务器操作和查询的智能缓存(自动缓存失效)
  • ✅ 使用 Prisma.io 定义实体(数据模型)
  • ✅ 前端的 ACL
  • ✅ 导入 NPM 依赖项

接下来会发生什么:

  • ⏳ 后端的 ACL
  • ⏳ 一键部署
  • ⏳ 更多身份验证方法(Google、Linkedin、...**
  • ⏳ 实体与其他功能更紧密的集成
  • ⏳ 主题和布局
  • ⏳ 支持明确定义的服务器 API
  • ⏳ 内联 JS - 将 JS 代码与 Wasp 代码混合的能力!
  • ⏳ Typescript 支持
  • ⏳ 服务器端渲染
  • ⏳ 可视化编辑器
  • ⏳ 后端支持不同的语言
  • ⏳ 更丰富的 wasp 语言和更好的工具

您可以在https://github.com/wasp-lang/wasp查看我们的 repo,并https://wasp-lang.dev/docs尝试一下-> 我们一直在寻找有关如何塑造 Wasp 的反馈和建议!

我们在Discord还有一个社区,我们在那里讨论与 Wasp 相关的话题 - 加入我们,看看我们在做什么,分享您的意见或获得有关您的 Wasp 项目的帮助。

文章来源:https://dev.to/martinsos/wasp-language-for-developing-full-stack-javascript-web-apps-with-no-boilerplate-3nc8
PREV
使用 JavaScript 制作 Sprite Sheet 动画
NEXT
如何用纯 HTML/CSS 实现令人惊叹的 3D 效果