为什么前端技术栈如此复杂?


【源创会预告】1024 程序员节(的前两天),相约开源PHP办公室,我们一起聊 AI!>>>

前端生态系统的复杂性是出了名的。在每一层,似乎都存在着不兼容的,相互竞争的标准。

没有通用的导入系统。ES模块、CommonJS、异步模块定义(AMD)和通用模块定义(UMD)都是你可以导入或分享代码的不同方式。打包器试图通过支持多种方法来解决这个问题。但是代码经历了多层的压缩、混淆和转译。TypeScript被编译成JavaScript。网络上的代码会被压缩(以减少网络带宽)或混淆(以防止复制)。源映射可以解决其中一些问题,但这又是另一项需要配置的事情。获取正确的堆栈跟踪可能会很棘手。这需要语言、工具和运行时之间的协调。

极其不同的环境。一个特性和一个错误。前端代码预期在任何地方运行 - 不仅仅是浏览器。在不同环境中可用的上下文和API各不相同,很难知道你有哪些可用的上下文(更不用说知道你正在导入的库假设了什么)。这段代码能在服务器上运行吗?这段代码能在客户端上运行吗?这对开发者来说很困难(我可以使用什么代码)对于库维护者来说也很困难(我应该为哪些环境优化我的代码?)。

过度强调文件结构。太多的前端工具依赖于项目结构来进行行为设定。配置必须在项目的根目录中(导致了一长串的tailwind.config.js、postcss.config.js、eslint.config.js、next.config.js等)。文件结构对于导入代码是必要的恶,但在前端中,它却做了更多的事情。它可能是一个API,用于将特定文件路由为网页,或者作为API,或者作为静态网页,或者作为动态重新生成的网页。这些都很方便,但有时候很难调试,也很难发现代码库的部分内容。

配置地狱。开箱即用的工具有很多。长期以来,我们有create-react-app,这是一个被赞誉的工具包,它集成了许多这样的工具,从一开始就为开发者提供了一个可用的配置。但是,如果你偏离了这条黄金路径,你就会被20多个开发工具和复杂的交互所困扰。几乎每个工具都在与其他工具争斗。ESLint(代码检查工具)和Prettier(代码格式化工具)经常发生冲突。

开发失衡。在代码和部署之间有如此多的步骤,意味着热重载开发往往复杂。这导致了像webpack-dev-server这样的工具的出现,它为你处理了大部分问题。但是要警惕魔法。这些开发服务器中有太多的假设,它们可能会迅速偏离生产行为。

原文:https://matt-rickard.com/why-is-the-frontend-stack-so-complicated

作者:Matt Rickard


相關推薦

2022-07-20

为什么会有这么多编程语言? 在编程语言如此丰富的今天,相信许多开发者都有过上面的疑问。不过早在 1960 年代初,人们就已经提出了这个问题。 《ACM通讯》期刊近日发表了题为《Why Are There So Many Programming Languages?》的文章

2023-01-30

游戏、eBPF、Web3.0、开源治理、开源教育培训、云原生、前端、基础软件、AI、IoT 等热门话题,探讨开源未来,助力开源发展。 大会在线下举办的同时,还将在线上同步直播。 本次大会将邀请 Linux 基金会执行董事 Jim Zemlin、

2022-10-16

游戏、eBPF、Web3.0、开源治理、开源教育培训、云原生、前端、基础软件、AI、IoT 等热门话题,探讨开源未来,助力开源发展。 大会在线下举办的同时,还将在线上同步直播。 本次大会将邀请 Linux 基金会执行董事 Jim Zemlin、

2023-11-12

助力开发人员对新兴技术的学习和掌握。 背景 这也是为什么做 Dante Cloud 的初衷: 一方面是以 Dante Cloud 为载体,潜移默化地将过往项目建设的经验教训融入其中,尽可能地帮助使用者规避或者减少无效工作,提升工作效

2024-04-04

dmin)、[fast-crud](https://github.com/fast-crud/fast-crud) 封装的全新前端,架子基本成型。 - feat(lamp-web): 前端页面右下角,新增本页源码按钮(本功能为了方便开发人员,公司投入使用时,建议在前端删除此按钮) - feat(lamp-util): 自行维护

2023-12-29

文件中的值 根据编译器提示优化了部分代码 修复前端项目,切换应用时,没有清理affix属性标记的菜单,导致切换后报404 《灯灯》中后台快速开发平台 lamp 项目组成 1) 工具集 ( lamp-util 项目必备,其他 2 个可选)

2023-10-30

助力开发人员对新兴技术的学习和掌握。 背景 这也是为什么做 Dante Cloud 的初衷: 一方面是以 Dante Cloud 为载体,潜移默化地将过往项目建设的经验教训融入其中,尽可能地帮助使用者规避或者减少无效工作,提升工作效

2024-04-10

助力开发人员对新兴技术的学习和掌握。 背景 这也是为什么做 Dante Cloud 的初衷: 一方面是以 Dante Cloud 为载体,潜移默化地将过往项目建设的经验教训融入其中,尽可能地帮助使用者规避或者减少无效工作,提升工作效

2024-03-14

助力开发人员对新兴技术的学习和掌握。 背景 这也是为什么做 Dante Cloud 的初衷: 一方面是以 Dante Cloud 为载体,潜移默化地将过往项目建设的经验教训融入其中,尽可能地帮助使用者规避或者减少无效工作,提升工作效

2024-01-17

amp-boot SpringBoot 版 (和 lamp-cloud 功能基本一致) 3) 前端 (下面 3 个项目功能一致,任选其一即可) 项目 gitee github 备注 租户后台 lamp-web lamp-web master 基于 vue-admin-element 开发 (vue2.x) 4.x_java17 基

2024-01-18

助力开发人员对新兴技术的学习和掌握。 背景 这也是为什么做 Dante Cloud 的初衷: 一方面是以 Dante Cloud 为载体,潜移默化地将过往项目建设的经验教训融入其中,尽可能地帮助使用者规避或者减少无效工作,提升工作效

2022-11-04

以纵向切入软件开发。      光可以自动匹配前端设置,前端支持图片功能,前端支持 Excel,PDF,Word,PPT 数据导出格式。光目前支持 sbmeu,smeu 和 msmeu 三种技术栈。即支持 SpringBoot 和经典 Spring 构架,支持 MyBatis 技术。其独

2022-11-17

项目和使用node.js平台安装类库和启动运行Vue和ElementUI的前端项目。 请见视频:https://www.bilibili.com/video/BV1he4y1a7VT/ Java通用代码生成器光2.3.0文明版本Beta8版,是最新稳定版,是程序员的曲速引擎。Beta8版修复了没有登录模块的模

2024-03-05

amp-boot SpringBoot 版 (和 lamp-cloud 功能基本一致) 3) 前端 (下面 3 个项目功能一致,任选其一即可) 项目 gitee github 备注 租户后台 lamp-web lamp-web master 基于 vue-admin-element 开发 (vue2.x) 4.x_java17 基