前端大厦建立在并不牢固的地基,浅谈JavaScript未来

前端大厦建立在并不牢固的地基上:JavaScript 的未来到底往哪走?

一个小小的 __dirname is not defined,让我重新思考了前端的未来。

上周我新建了个 Vite 项目,顺手写下那段陪伴我十年的配置代码:

javascript 复制代码
// vite.config.js
import path from 'path';
export default {
  resolve: {
    alias: { '@': path.resolve(__dirname, 'src') }
  }
};

结果 TypeScript 给了我当头一棒:
__dirname is not defined

这段从 Node.js 时代一路走来的"老伙计",为什么突然就不行了?


不是 API 不见了,是我们换了运行时代

path 没问题,Node.js 也没问题。

真正的问题叫:你已经进入 ESM 时代了。

在 ES Modules 里,确实没有 __dirname 这个东西。

要写的话,只能这样绕一圈:

javascript 复制代码
import { fileURLToPath } from 'node:url';
import { dirname } from 'node:path';

const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);

或者换个更现代的写法:

arduino 复制代码
alias: {
  '@': fileURLToPath(new URL('./src', import.meta.url))
}

看着有点繁琐,但它背后的意义非常大:

我们正在统一运行时,让配置文件能在 Node、Bun、Deno 甚至浏览器里跑起来。

以前所有工具都默认你用 Node。

现在工具链在努力"脱 Node 而不反 Node"。

这是一次升级,而不是破坏。


工具链不是抛弃 Node.js,而是让我们不再依赖它的"私货"

这几年,构建工具几乎在"集体逃离 JavaScript":

  • ESBuild 用 Go 写
  • Rspack 和 Turbopack 用 Rust 写
  • SWC 也用 Rust 写

于是很多人开始问:
"那我还学 Node.js 干嘛?"

其实答案很简单:要学,但重点不一样了。

你不必再研究:

  • libuv 怎么调度事件
  • C++ 插件怎么写
  • 事件循环有几层 phase

但你仍然需要懂:

  • ESM 下路径、文件系统的正确写法
  • 构建工具配置怎么写
  • 插件怎么开发

原因很现实:

工具链底层可以用 Rust 或 Go 写,但你写的配置、插件、脚本还是要走 JavaScript。

"工具在加速,你在抽象。"

我们写的不是底层引擎,而是告诉编译器我们想要什么。

这就是未来。


Node 模块不会消失,但会变成"兼容层"

我相信未来工具链会出现类似这样的 API:

csharp 复制代码
import { resolveAlias } from 'vite/utils';
alias: { '@': resolveAlias('./src') }

不用再管:

  • 是 Node 在运行
  • 还是 Bun
  • 还是 Deno
  • 甚至未来是不是浏览器直接跑构建工具

到那时,Node.js 的模块依然在,但它会慢慢变成"大家都懂的基本 API",就像互联网的通用协议一样。

你要学 Node?

要,但不需要钻那么深。

你需要的是写出更通用、更标准、更不绑定运行时的代码。


Rust 重写的是工具,不是 JavaScript 本身

这句真的很重要。

工具链被 Rust 重写,是因为 JavaScript 不适合做"工程级大工具"。

但这不代表 JS 要退出舞台。

Rust 替代的是:

  • Babel → SWC
  • Webpack → Rspack / Turbopack
  • 部分 CLI 工具 → Rust 版本的高速实现

但真正跑你业务代码的仍然是:

  • 浏览器里的 V8 / JavaScriptCore
  • Node.js / Deno / Bun

Rust 是发动机,JavaScript 是燃料。两者不是竞争关系。


V8 会被抛弃吗?JavaScript 凭什么还活得这么滋润?

JavaScript 的确有很多槽点:

  • 0.1 + 0.2 !== 0.3
  • typeof null === 'object'
  • 隐式转换能把人心态搞崩

但它有一项别人打不败的技能:

所有浏览器都支持 JavaScript。

这就是"现实世界的压制力"。

而 V8 更不是简单的 JS 引擎,它还是:

  • DOM / Web API 的实现者
  • WebAssembly 的宿主
  • Node.js 和 Deno 的基石
  • 前后端通用运行时的底层

所以说:
你可以骂 JavaScript,但你没法绕过它。

生态的力量不是某种语言可以轻易撼动的。


JavaScript 的未来:正在悄悄变成"前端的汇编语言"

你可能已经感觉到了:

  • 你写的业务逻辑越来越依赖 TypeScript
  • UI 越来越声明式(Vue / Svelte / React)
  • 重性能逻辑靠 Rust + WASM
  • 构建工具自动把一切编译成 JS + WASM

你写的纯 JavaScript 可能越来越少。

但是 JS 不会消失,它会像"浏览器的汇编语言"一样静静待在那里,作为:

  • 运行时的中间层
  • WASM 的宿主
  • TypeScript 的目标产物
  • 工具链真正输出的落地代码

它不是主角了,但它变得更稳定、更基础、更不可替代。


结语:在流沙之上建高楼,是前端工程师的浪漫

前端的世界地基确实不稳:

  • JavaScript 的历史包袱
  • Node.js 的割裂
  • 浏览器的碎片化
  • 工具链一次次的重写

我们用 TypeScript 修补类型。

用 Rust 提升性能。

用 ESM 拉齐规范。

用工具链把复杂性藏到地板下面。

最终,我们居然真正在这片流沙上,建起了一座足够坚固的数字城市。

地基我们没法选,但建筑方式我们能决定。

最后的最后

如果真的有 JavaScript 和 V8 被彻底替代的一天,那么被推翻的将远不止前端程序员的工具链,而是整个现代 Web 生态:数十亿网站、数千万开发者、上万亿美元的数字基础设施,都将随之重构。

但到那时,我们可能早就------
不再称它为"Web"了

或许我们已全面进入空间计算、神经交互或去中心化协议的新范式;或许"浏览器"已成为历史名词;又或许,人类与机器的交互方式早已超越"页面"与"脚本"的范畴。

在那个未来里,JavaScript 的退场不会是一场革命,而是一次静默的谢幕------如同马车消失于汽车时代,不是被禁止,而是被超越。

但在今天,在可预见的未来十年甚至二十年,JavaScript 仍是我们唯一可行的通用语言,V8 仍是这座数字世界最可靠的引擎

所以,不必等待完美地基。
在流沙之上,继续建造。

你怎么看 JavaScript 的未来?欢迎在评论区聊聊你的想法。

相关推荐
重铸码农荣光26 分钟前
一文吃透 ES6 Symbol:JavaScript 里的「独一无二」标识符
前端·javascript
申阳27 分钟前
Day 15:01. 基于 Tauri 2.0 开发后台管理系统-Tauri 2.0 初探
前端·后端·程序员
重铸码农荣光28 分钟前
一文吃透 JS 事件机制:从监听原理到实战技巧
前端
2503_9284115634 分钟前
11.25 Vue内置组件
前端·javascript·vue.js
我有一个object1 小时前
uniapp上传文件报错:targetSdkVersion设置>=29后在Android10+系统设备不支持当前路径。请更改为应用运行路径!
前端·javascript·vue.js·uniapp
北极糊的狐1 小时前
关于jQuery 事件绑定,记录常用事件类型及核心注意事项
前端·javascript·jquery
_Kayo_1 小时前
vue3 computed 练习笔记
前端·vue.js·笔记
CodeSheep1 小时前
VS 2026 正式发布,王炸!
前端·后端·程序员
无奈何杨1 小时前
CoolGuard事件查询增加策略和规则筛选,条件结果展示
前端·后端