前端邪修:不用Vite也不用Webpack,把React拖回HTML时代的反工程化实践

news/2026/1/22 11:30:25/文章来源:https://www.cnblogs.com/deali/p/19516127

前言

最近一直忙于装修和开发新产品,文章都没时间更新,快速迭代的后果就是架构没有跟上功能增长的步伐,现在隐隐有脱离掌控的感觉,我这几天也把进度放慢下来,思考一下整体的规划。

也顺便整理一下笔记,没有输出心里很不踏实🤣

好了,说回正题,为什么标题叫“前端邪修”呢?在前端高度工程化的今天,各种工具层出不穷,大家都在说别更新了,学不动了,我直接反其道而行:

  • 不用 Vite
  • 不用 Webpack
  • 不跑 dev server
  • 不搞 HMR
  • 不维护 node_modules

直接在 HTML 文件里引入 React 写界面!

这听起来很像 2025 年还在用 Dreamweaver 写网页哈哈哈🤣

本文记录一次可以称之为「前端邪修」的反工程化开发实践。

第一阶段 Runtime JSX

一开始,我用的是最原始、也最“离经叛道”的 React 用法。

<script src="react.development.js"></script>
<script src="react-dom.development.js"></script>
<script src="babel.min.js"></script><script type="text/babel">function App() {return <h1>Hello World</h1>;}
</script>

特点很明显:

  • 不需要 Node
  • 不需要 npm / pnpm
  • 打开浏览器就能写 React
  • JSX 由 babel-standalone 在浏览器里实时编译

你别说,其实这种方法写起来还挺爽的(逃

  • 心智负担极低
  • 没有工具链焦虑
  • HTML 即入口,所见即所得

但缺点也很明显:

  • 各种依赖体积巨大,动辄几MB
  • JSX runtime 编译极慢
  • 页面一复杂,加载时间肉眼可见地上升

我这个简单的app,本地加载都要半分钟的时间🤣

其实这种用法,是 React 官方早期 Demo + 教学级用法,后来被官方明确标注为:Not recommended for production

我之前也写过一篇文章介绍:在HTML中引入React和JSX

实践也证明了,这种方式只能当本地demo测试一下,根本不能作为production发布。

第二阶段

gulp + babel,我只要 JSX 编译

我选择了一个在今天看来非常“复古”的工具:gulp

这个工具虽然简单,但非常好用,我一直非常喜欢这个工具,可以在我的很多项目里看到 gulp 的身影:

  • AspNetCore开发笔记:使用NPM和gulp管理前端静态文件
  • Django项目引入NPM和gulp管理前端资源
  • 返璞归真!使用 Alpine.js 开发交互式 web 应用,抛弃 node_modules 和 webpack 吧!

用法是这样的:

把 jsx 组件按照顺序,显示添加到待处理的列表里

const jsxComponents = ["Alert.jsx","Toast.jsx","Login.jsx","Register.jsx","ChatView.jsx","DetailView.jsx","App.jsx"
];

我放弃了自动依赖分析,这在现代前端里几乎是“原罪”。😂

但在一个边界清晰、规模可控的项目里,它反而是最可控的方式。

gulp 在这里做了简单的几个事情:

  • JSX → JS
  • 多文件 → 一个 bundle
  • 压缩
gulp.task("concat:jsx", () => {return gulp.src(jsxComponents, { base: "." }).pipe(babel({presets: ["@babel/preset-env", "@babel/preset-react"]})).pipe(concat("dist/js/app.bundle.js")).pipe(terser()) // Use terser for minification.pipe(gulp.dest(paths.root));
});

没有 loader,没有 plugin 地狱,没有配置互相打架。

最终产物只有一个:dist/js/app.bundle.js

最终形态

构建完成后,整个应用的入口是一个极其朴素的 HTML 文件。

<script src="lib/react/react.production.min.js"></script>
<script src="lib/react-dom/react-dom.production.min.js"></script>
<script src="lib/axios/axios.min.js"></script>
<script src="dist/js/app.bundle.js"></script>

几个我非常喜欢的点:

  • 所有依赖都是显式的

  • React 不需要 JSX 才能运行

  • 浏览器缓存是我自己控制的

    <script>(function () {const scripts = ["dist/js/app.bundle.js",];const v = new Date().getTime();scripts.forEach(src => {document.write(`<script src="${src}?v=${v}"><\/script>`);});})();
    </script>
    

为什么?

这么做的起因其实很简单,我的后端需要一个简单的交互页面,而我既不想创建一个新的 Next.js/Vite 前端项目来做,也不想用后端模板渲染+HTMX/Alpine.js 这种方案。

  • 前者的问题是成本

    为了一个功能边界非常清晰的页面,引入一整套前端工程体系,意味着要额外维护一份项目结构、一套构建配置、以及一整条工具链生命周期。这种成本,对这个需求来说是过度的

  • 后者的问题则在表达能力

    后端模板渲染配合 HTMX 或 Alpine.js 确实轻量,但当页面开始出现较复杂的状态流转、组件复用和逻辑组合时,我很快就会开始“手动模拟一个组件系统”。与其在模板语法和指令里绕来绕去,不如直接使用一个我已经非常熟悉、心智模型也足够稳定的组件库(React生态)。

于是问题就变成了:

我能不能只使用 React 的“表达能力”,而不引入它背后的整套工程化体系?

这正是这套“前端邪修”方案的出发点。

价值

这套“前端邪修”方案解决了什么?

用一句话总结:如何在不引入额外工程复杂度的前提下,获得一个足够舒适的交互层。

具体来说,这个方案做到了几件事:

  • 不需要单独维护一个前端项目
  • 不需要 dev server、HMR 和复杂的构建配置
  • 不需要为一个小页面承担整套前端工程的长期成本
  • 但依然可以:
    • 使用组件化思维
    • 管理清晰的状态和交互逻辑
    • 写出结构清楚、可维护的 UI 代码

这不是在追求最轻量,而是在追求:复杂度与需求规模之间的匹配。

当需求足够简单时,工程化本身就应该是可以被拆解、被克制、甚至被拒绝的。

取舍

👍 我得到的

  • 极低的心智负担
  • 极稳定的构建过程
  • 无运行时构建依赖
  • 非常适合:
    • Admin 系统
    • AI 控制台
    • 内部工具
    • WebView / 嵌入页面

❌ 我主动放弃的

  • HMR
  • 自动 code splitting
  • TypeScript 全链路
  • 生态插件红利

小结

我做的事情其实很简单:把复杂度一层一层拆掉,直到只剩下业务真正需要的那一层。

我不推荐所有人这样做,但我会继续做一些反工程化的尝试,在AI时代反其道而行之,还挺有意思的😄

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1199805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STAR-CCM+许可证与HPC计算资源全局使用状态可视化监控大屏

为什么你的企业需要STAR-CCM许可证与HPC计算资源的全局监控&#xff1f;作为一家企业的IT部门经理&#xff0c;我深知企业在数字化转型过程中&#xff0c;计算资源和软件许可证这两个“隐形资源”对研发投入的影响。在我们公司&#xff0c;工程仿真软件STAR-CCM是产品设计阶段不…

原圈科技AI营销内容:SaaS案例创作告别低效,效率翻倍

原圈科技的AI营销内容解决方案&#xff0c;旨在解决SaaS企业客户案例生产周期长、效率低的痛点。本文将通过四步实操教程&#xff0c;揭秘如何利用其AI多智能体系统&#xff0c;快速、批量生成高质量的个性化客户故事&#xff0c;将营销团队从繁琐工作中解放出来&#xff0c;实…

从手动管理到智能运营:Citrix许可证管理数字化升级

从手动管理到智能运营&#xff1a;Citrix许可证管理数字化升级作为一名长期从事Citrix平台运维的工程师&#xff0c;我深知企业IT部门在进行许可证管理时所面临的挑战。是在大规模部署的环境下&#xff0c;手动登记、核对、更新许可证不仅效率低下&#xff0c;更存在极高的出错…

学长亲荐10个一键生成论文工具,本科生搞定毕业论文!

学长亲荐10个一键生成论文工具&#xff0c;本科生搞定毕业论文&#xff01; 论文写作的救星&#xff1a;AI工具如何改变你的学术之路 在当今这个信息爆炸的时代&#xff0c;本科生面对毕业论文的压力可谓前所未有。从选题到撰写&#xff0c;再到查重降重&#xff0c;每一个环…

好写作AI:面对数据就头大?别慌!让AI当你的“数据分析翻译官”

各位一看到Excel里密密麻麻的数字就瞳孔地震、一想到要写“结果与讨论”就双手发软的同学们&#xff0c;你们并不孤单&#xff01;数据处理与分析&#xff0c;简直是横在文科生和部分理科生面前的“珠穆朗玛峰”——知道它重要&#xff0c;但爬上去真的好难。 别急着投降&…

nRF21540特性及配置详解

nRF21540 的主要特性如下 集成射频功率放大器(PA)和低噪声放大器(LNA) 支持协议:Bluetooth Low Energy、Bluetooth mesh、Thread、Zigbee (IEEE 802.15.4) 以及 2.4 GHz 私有协议 最大输出功率:可调节,最高可达…

OpenHarmony环境下React Native:Zustand持久化存储

OpenHarmony环境下React Native&#xff1a;Zustand持久化存储实战指南本文深入探讨在OpenHarmony平台使用Zustand实现React Native应用状态持久化的完整解决方案。通过详细的架构解析、适配策略和实测代码&#xff0c;解决跨平台状态管理的核心痛点&#xff0c;提供开箱即用的…

构建医疗领域主权AI基础设施的技术合作

SAP和Fresenius正在为医疗保健领域构建一个主权AI平台&#xff0c;旨在为临床环境带来安全的数据处理。 对于医疗领域的数据负责人而言&#xff0c;部署AI需要公共云解决方案通常缺乏的严格治理。此次合作通过创建一个“受控环境”来弥补这一差距&#xff0c;使AI模型能够在其…

React Native + OpenHarmony:Jotai原子派生状态

React Native OpenHarmony&#xff1a;Jotai原子派生状态深度实战&#x1f50d; 本文将深入探讨Jotai原子状态管理库在React Native与OpenHarmony跨平台开发中的实战应用&#xff0c;重点解析原子派生状态的实现原理、OpenHarmony平台适配要点及性能优化策略。通过8个可运行代…

2026年中国GEO优化公司格局新观察:头部企业梳理与选择推荐

2025年,生成式AI搜索(GEO)赛道迎来爆发式增长,市场规模突破480亿元,年增速达68%,AI推荐位成为品牌竞争的终极战场。技术深度与落地效果愈发成为服务商的核心竞争力,也成为企业选择合作伙伴的关键标尺。基于此,…

比工业革命快百倍的巨变:DeepMind掌门人眼中的AGI倒计时与终极图景

Google是否已经找回了它的灵魂?在经历了被竞争对手“突袭”的焦虑期后,DeepMind创始人兼Google AI掌门人Demis Hassabis给出了肯定的答案。随着Gemini 3的发布和内部“红色代码(Code Red)”状态的常态化,这位致力于解码通用人工智能(AGI)的科学家,正在带领Google从单纯…

【Vibe Coding百图计划】用Python下一场永不融化的雪

文章目录写在前面项目架构技术需求主要代码代码分析写在后面写在前面 Python绘制动态飘雪效果的完整代码。 项目架构 #mermaid-svg-0xeWTso3CZ1OhTRr{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-fr…

基于Hadoop生态的图书大数据挖掘与交互式可视化平台 基于Python+Spark的图书内容价值评估与预测性分析系统

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Spark、hadoop、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题…

在OpenHarmony上用React Native:Recoil选择器异步数据

在OpenHarmony上用React Native&#xff1a;Recoil选择器异步数据详解 摘要 本文将深入探讨如何在OpenHarmony平台上使用React Native的Recoil状态管理库处理异步数据。文章详细解析Recoil异步选择器的核心原理&#xff0c;提供在OpenHarmony环境下的完整适配方案&#xff0c…

拒绝“泡沫论”:黄仁勋眼中的AI下半场——从聊天机器人到物理世界的新工业革命

在2026年达沃斯世界经济论坛的聚光灯下,关于人工智能的讨论早已超越了“它能做什么”的新奇感,转向了更为严肃的“它将如何重塑全球经济底层逻辑”的宏大命题。当外界还在争论AI是否处于泡沫顶峰时,NVIDIA掌门人黄仁勋在与贝莱德(BlackRock)CEO拉里芬克(Larry Fink)的对…

【大数据毕设选题】基于Spark的豆瓣读书数据多维分析与智能聚类可视化系统 基于python的豆瓣图书数据可视化与分析平台

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Spark、hadoop、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题…

基于Python 校园学生宿舍管理系统(源码+数据库+文档)

校园学生宿舍管理 目录 基于PythonDjango校园学生宿舍管理系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于PythonDjango校园学生宿舍管理系统 一、前言 博主介绍…

React Native鸿蒙版:React Query无限滚动

React Native鸿蒙版&#xff1a;React Query无限滚动深度实践与OpenHarmony适配指南 摘要 本文深入探讨在OpenHarmony平台使用React Native实现高性能无限滚动列表的完整解决方案。通过集成React Query数据管理库&#xff0c;我们将解决网络数据分页加载、滚动性能优化、内存…

计算机毕业设计|基于springboot + vue网上超市系统(源码+数据库+文档)

网上超市 目录 基于springboot vue网上超市系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于springboot vue网上超市系统 一、前言 博主介绍&#xff1a;✌️大…

GEO优化公司市场口碑谁领先?智推时代RaaS模式验证,十家服务商能力对比

在AI搜索重塑信息分发逻辑的当下,生成式引擎优化(GEO)已从可选营销工具升级为企业数字化转型的必答题。《2025中国AI商业服务白皮书》显示,GEO市场规模突破128亿元,近三年复合增长率达41.7%,83%的跨国企业对其需…