忘掉构建工具:为什么 Web 需要dagger.js

888 阅读3分钟

本文翻译自medium
前端开发从未如此强大,但也从未如此复杂。React、Vue、Angular、Svelte:它们推动了 Web的发展,但也把我们埋进了构建流程、配置文件和依赖树。

有时候你并不想为了一个按钮就搭建一条生产线。你只想要 HTML + JS,直接在浏览器里跑起来

这就是 dagger.js 存在的意义。

现代前端的问题

我们不得不承认:

  • 学习曲线陡峭:React 和 Vue 需要数周时间新手才能上手
  • 构建负担:Vite、Webpack、Babel
  • 很强大,但对小项目来说是沉重负担
  • 依赖膨胀:几十甚至上百个包,常常在最糟糕的时候出问题
  • 锁定效应:框架专属 API 让迁移几乎不可能

悖论是: 2025 年的网站比 1999 年还慢 ------ 尽管硬件已经快了 100 倍。

dagger.js 的核心理念

dagger.js 是一个指令驱动、纯运行时的框架,具备:

  • 零构建 ------ 不需要打包、不需要编译
  • 零依赖 ------ 无需 npm install
  • 零 API ------ 不用记复杂的框架 API
  • 极小体积 ------ 轻量快速 只需要在 HTML 页面里引入,就能直接工作。 没有 bundler,没有 compiler,没有 install。

它就像 Alpine.js 的极简表亲,但更轻。

示例一:计数器

最经典的例子:

<div dg-cloak +load="{ count: 0 }">
  <button +click="count++">Clicked: ${ count }</button>
  <button +click="count = 0">click to reset</button>
</div>

👉 在线运行:CodePen Demo

没有 npm install,没有复杂模板。写出来的代码和直接在浏览器中运行的代码是完全一致的。

示例二:元素外点击

dagger.js 轻松处理元素点击逻辑:

<div dg-cloak class="popover-container" +load="{ exist: false }">
  <button +click="exist = !exist">
    Toggle Popover
  </button>
  <div class="popover" *exist +click#outside="exist = false">
    I'm a popover!
  </div>
</div>

👉 在线运行:CodePen Demo

dagger.js 与其他框架对比

特性对比:

  • React/Vue → 需要构建,依赖多,API 复杂
  • Alpine.js → 无需构建,依赖少,API 简单
  • dagger.js → 无需构建,零依赖,零 API

table.png

dagger.js 并不是要取代 React 或 Vue。
它要做的是 重新定义基线:Web 最简洁的交互方式。

隐藏的风险:npm 供应链攻击

现代前端应用通常依赖 成百上千个 npm 包。 甚至一个最简单的 React “Hello World” 都会安装几兆你从未读过的代码。

这种复杂性带来了代价:供应链攻击。

恶意代码被注入到流行包中(例如 event-stream, ua-parser-js),影响了成千上万的应用。 攻击者利用传递依赖 ------ 你没直接装过恶意包,但你的依赖装了。 团队不得不花时间在依赖扫描、安全审计、打补丁,而不是开发功能。 换句话说:每一个依赖,都是潜在的后门。

dagger.js 的安全哲学

dagger.js 选择了一条完全不同的道路:

  • 不需要 npm install, 直接插入脚本标签即可
  • 零依赖 没有传递依赖风险
  • 纯运行时 源码可见即运行
    通过消除依赖树,dagger.js 几乎把攻击面降到零。 安全性并不是附加功能,而是它的设计哲学。

dagger.js 适合的场景

  • 快速原型 ------ Hackathon、MVP、想法验证
  • 教学 ------ 帮助学生专注于 Web 基础而非工具链
  • 内部工具 ------ CRUD、Dashboard,不需要庞大的 node_modules
  • IoT / 边缘应用 ------ 资源受限环境下的最佳选择

哲学:重拾简单

dagger.js 基于一个简单的问题: 如果 Web 开发依然像当初一样简单,会怎样?

写出来就能跑 不需要 bundler,不需要 compiler,一个晚上就能读完整个框架源码。 它不是在和 React 竞争。 它是在提醒我们:Web 应该是简单、直接、强大的。

加入实验

dagger.js 还很年轻,但现在是参与的最好时机:

dagger.js 不是下一个大框架。
它是下一个小而美的框架:简单,直观,即插即用。