阅读视图

发现新文章,点击刷新页面。

JavaScript 今天30 岁了,但连自己的名字都不属于自己

image.png

12 月 4 号,JavaScript 迎来 30 岁生日。

一门 10 天赶出来的语言,现在跑在 98.9% 的网站上,有 1650 万开发者在用它。从浏览器脚本到服务端运行时,从桌面应用到移动端,甚至嵌入式设备都有它的身影。TIOBE 2024 年度编程语言排行榜上,JavaScript 排第 6。

但 30 周年这天,社区没怎么庆祝。大家更关心的是另一件事:JavaScript 这个名字,到底能不能从 Oracle 手里抢回来。


10 天写出来的语言

1995 年 5 月,Netscape 的工程师 Brendan Eich 接到一个任务:给浏览器加一门脚本语言。

时间表很紧——Navigator 2.0 Beta 版要发布了,必须赶上。

Eich 花了 10 天(据他回忆是 5 月 6 日到 15 日),搞出了第一个原型。这不是夸张,是真的 10 天。

他后来自己说:

当你看我 10 天写的东西,它像一颗种子。是一种有力的妥协,但仍然是一个非常强大的内核,后来长成了一门更大的语言。

这门语言最开始叫 Mocha,后来改叫 LiveScript,最后因为市场原因蹭了 Java 的热度,改名 JavaScript。

1995 年 12 月 4 日,Netscape 和 Sun 联合发布公告,宣布 JavaScript 正式诞生。28 家公司为这门新语言背书,包括 America Online、Apple、AT&T、Borland、HP、Oracle、Macromedia、Intuit、Toshiba 等科技巨头。

有意思的是,Oracle 当时是 JavaScript 的支持者之一,新闻稿的媒体联系人里还有 Mark Benioff(后来创办了 Salesforce)。没想到 30 年后,Oracle 成了社区想要摆脱的"商标持有者"。

Sun 联合创始人 Bill Joy 说:

JavaScript 是 Java 平台的完美补充,天生就是为互联网和全球化设计的。

America Online 技术总裁 Mike Connors:

JavaScript 带来了跨平台的快速多媒体应用开发能力。

HP 的 Jan Silverman:

JavaScript 代表了专门为互联网设计的下一代软件。

Netscape 和 Sun 还计划把 JavaScript 提交给 W3C 和 IETF 作为开放标准。后来 JavaScript 确实标准化了,但官方名字叫 ECMAScript——因为商标问题。

1996 年 3 月发布 1.0 版本后,JavaScript 的野心远不止当初设想的"胶水语言"。


从玩具到基础设施

当年 JavaScript 的定位是"胶水语言",让不会编程的人也能在网页上加点交互。

没人想到它会变成今天这样。

几个关键节点:

2009 年 - Node.js 诞生

Ryan Dahl 把 V8 引擎搬到服务端,JavaScript 不再只是浏览器里的玩具。前后端同构成为可能。

2015 年 - ES6 发布

let/const 替代 var,箭头函数,Promise,Class 语法... JavaScript 终于像个正经语言了。

2012 年 - TypeScript 发布

微软给 JavaScript 加了类型系统。2017 年只有 12% 的 JavaScript 开发者用 TypeScript,到 2024 年这个数字涨到了 35%。现在大型项目几乎都是 TypeScript。

框架时代

React、Vue、Angular 轮番登场。整个前端生态围绕 JavaScript 建立起来。现在有人的整个职业生涯都建立在某个特定的 JS 框架上。

嵌入式领域

JavaScript 甚至跑到了微控制器上。Espruino 项目让你可以在 24.95 美元的小板子上写 JavaScript,功耗低到 0.06mA,还能跑蓝牙。有个智能手表 Bangle.js 2,一块电池能用 4 周,上面跑的就是 JavaScript。


名字的问题

JavaScript 这个名字,商标属于 Oracle。

Oracle 2009 年收购 Sun 的时候一起拿到的。但 Oracle 自己根本不做 JavaScript 相关的产品,商标就这么放着。

问题来了:因为商标在 Oracle 手里,社区做事很尴尬。

  • 不能叫 JavaScript Conference,只能叫 JSConf
  • 官方规范叫 ECMAScript,不叫 JavaScript
  • 写书、办会议、做项目,用 JavaScript 这个词都有法律风险

Brendan Eich 2006 年写过:"ECMAScript 一直是个没人想要的商业名称,听起来像皮肤病。"

讽刺的是,Oracle 甚至不是 OpenJS Foundation 的成员,跟 Node.js 的开发也没有任何关系。

Node.js 和 Deno 的创始人 Ryan Dahl 看不下去了。2024 年 9 月他发起了 "Free the Mark" 运动,发布了一封公开信,28,600 多名开发者签名支持。

image.png 签名的人里有几个重量级的:

  • Brendan Eich - JavaScript 创造者本人
  • Ryan Dahl - Node.js 创造者
  • Michael Ficarra、Shu-yu Guo - JavaScript 规范编辑
  • Rich Harris - Svelte 作者
  • Isaac Z. Schlueter - npm 创始人
  • James M Snell - Node.js TSC 成员
  • Jordan Harband - JavaScript 规范荣誉编辑
  • Matt Pocock - Total TypeScript 课程作者
  • Wes Bos、Scott Tolinski - Syntax.fm 播客主持人

11 月正式向美国专利商标局提交申请,要求撤销 Oracle 的商标。

理由有三:

  1. 通用化 - JavaScript 已经变成通用名词了,就像 aspirin(阿司匹林)一样
  2. 弃用 - Oracle 三年多没用这个商标做任何商业用途
  3. 欺诈 - Oracle 2019 年续期商标时,提交的使用证据是 Node.js 的截图。Node.js 跟 Oracle 没有半毛钱关系

公开信里说得很直白:

Oracle 从来没有认真推出过叫 JavaScript 的产品。GraalVM 的产品页面甚至都没提"JavaScript"这个词,得翻文档才能找到它支持 JavaScript。

公开信还指出,Oracle 2019 年续期商标时提交的"使用证据"是 nodejs.org 的截图和 Oracle JET 库。Node.js 根本不是 Oracle 的产品,JET 只是 Oracle Cloud 服务的一个 JavaScript 库,跟市面上成千上万的 JS 库没什么区别。

按美国法律,商标 3 年不用就算放弃。Oracle 既没用这个商标,又眼睁睁看着它变成通用名词,两条都占了。

image.png

2025 年 2 月,Oracle 申请驳回诉讼中的欺诈指控。6 月,商标审判和上诉委员会驳回了欺诈指控,但撤销申请继续审理。8 月,Oracle 首次正式回应,否认 JavaScript 是通用名词。

官司预计要打到 2026 年。

Deno 团队正在众筹 20 万美元的法律费用,用于发现阶段的调查取证,包括做公众调查来证明普通人不会把 JavaScript 和 Oracle 联系在一起。


30 年后的 JavaScript

现在的 JavaScript 和 1995 年的已经是两门语言了。

当年的 varlet/const 取代。当年的原型继承有了 Class 语法糖。当年的回调地狱有了 Promise 和 async/await。

ES2025 刚发布,又加了一堆新特性。

工具链也完全不同了:

  • 打包器从 webpack 到 Vite,Vite 8 刚用上 Rolldown,速度又快了一大截
  • 运行时从只有浏览器,到 Node.js、Deno、Bun 三足鼎立
  • TypeScript 成了事实上的标准
  • 1650 万开发者,比很多国家的人口都多

Brendan Eich 当年 10 天写的种子,长成了一片森林。


顺手推几个项目

既然聊到 JavaScript 生态,推一下我做的几个开源项目:

chat_edit - 一个双模式 AI 应用,聊天 + 富文本编辑。Vue 3.5 + TypeScript + Vite 8 技术栈,可以自己配 API key 部署。

code-review-skill - Claude Code 的代码审查技能,覆盖 React、Vue、TypeScript 等主流技术栈,按需加载不浪费 token。

5-whys-skill - 根因分析技能,排查问题的时候用"5 个为什么"方法论。

first-principles-skill - 第一性原理思考技能,适合架构设计和技术方案选型。帮你拆解问题本质。

感兴趣可以去 GitHub 看看。


相关链接

Vite8来啦,告别 esbuild + Rollup,Vite 8 统一用 Rolldown 了

vite8.webp

用 Vite 做项目的应该都有感觉:开发体验一直很顺,但生产构建这块,项目一大就开始拉胯。

问题出在 Vite 的双引擎架构——开发用 esbuild,生产用 Rollup。两套东西,行为不一致,偶尔还会出现"本地没问题,构建就炸"的玄学 bug。

12 月 3 号,Vite 8 Beta 发布了,底层换成了 Rolldown。我第一时间把手上的项目升级了,踩了几个坑,这里记录一下。


Rolldown 是什么

简单说:一个 Rust 写的打包器,目标是同时替代 esbuild 和 Rollup。

尤雨溪的 VoidZero 团队搞的,拿了 1700 多万美金融资。整个工具链是这样的:

  • Vite(构建工具)
  • Rolldown(打包器)
  • Oxc(编译器、压缩器)

三个项目同一个团队维护,行为一致性有保障。

Rolldown 和 esbuild 速度差不多,比 Rollup 快 10-30 倍。尤雨溪自己测 Vue 核心代码的打包,Rolldown 比 Rollup 快 7 倍,比 esbuild 还快将近 2 倍。


真实项目数据

看看早期用户的反馈:

项目 构建时间变化 提升倍数
Linear 46s → 6s 7.6x
Excalidraw 22.9s → 1.4s 16x
GitLab 2.5min → 40s 3.75x
Beehiiv - 64% 更快

GitLab 还有个离谱的数据:内存占用降了 100 倍。


升级步骤

升级本身不复杂:

pnpm add -D vite@8.0.0-beta.0 @vitejs/plugin-vue@latest

Node.js 版本要求 20.19+ 或 22.12+,18 不支持了。

装完大概率能跑,但如果你用了 manualChunks,会遇到问题。


踩坑:manualChunks 不能用了

我的项目之前用对象形式配置 chunk 分割:

// 旧写法,Vite 8 直接报错
rollupOptions: {
  output: {
    manualChunks: {
      'vue-vendor': ['vue', 'pinia'],
      'monaco': ['monaco-editor'],
    }
  }
}

跑构建直接炸:TypeError: manualChunks is not a function

Rolldown 不支持对象形式的 manualChunks,得改成 advancedChunks

// 新写法
rollupOptions: {
  output: {
    advancedChunks: {
      groups: [
        { name: 'vue-vendor', test: /[\\/]node_modules[\\/](vue|pinia)[\\/]/ },
        { name: 'monaco', test: /[\\/]node_modules[\\/]monaco-editor[\\/]/ },
      ]
    }
  }
}

用正则匹配模块路径,比之前的数组形式更灵活,但迁移需要手动改一遍。


其他变化

配置项重命名

build.rollupOptions 以后要改成 build.rolldownOptions,目前还兼容但会有警告。

CSS 压缩

默认从 esbuild 换成了 Lightning CSS。想换回去可以设置 build.cssMinify: 'esbuild'

JS 压缩

从 esbuild 换成了 Oxc Minifier。

插件兼容性

大部分 Vite 插件直接能用。少数依赖 esbuild 特定选项的需要适配。


开发服务器

开发服务器启动速度没太大变化,本来就快。

但后面会有个 Full Bundle Mode,开发阶段也打包。官方初步数据:

  • 启动快 3 倍
  • 热更新快 40%
  • 网络请求少 10 倍

大型项目福音,不过目前还没正式发布。


要不要升

我的建议:

现在可以升的

  • 个人项目、实验性项目
  • 构建时间已经成为痛点的大型项目
  • 愿意踩坑反馈问题的

等等再升的

  • 生产环境稳定性优先的项目
  • 依赖大量 Rollup 特定配置的
  • 等正式版发布(估计一两个月内)

顺手推几个开源项目

既然聊到 Vite 和前端工具链,推一下我做的几个开源项目:

chat_edit - 双模式 AI 应用,聊天 + 富文本编辑整合在一起。技术栈刚升级到 Vue 3.5 + TypeScript + Vite 8,可以作为 Vite 8 实战参考。自己配置 API key 就能部署,支持导出 PDF、DOCX、Markdown。

code-review-skill - Claude Code 的代码审查技能,覆盖 React 19、Vue 3、Rust、TypeScript 等主流技术栈。采用按需加载设计,审查 React 代码时只加载 React 相关规则,不浪费 token。大概 9000 行最佳实践。

5-whys-skill - "5 个为什么"根因分析技能。遇到 bug 或者系统问题时,说"找根因"就能自动激活,输出结构化的分析报告。排查问题挺好用的。

first-principles-skill - 第一性原理思考技能,适合架构设计和技术方案选型。不是套模板,是真的帮你拆解问题本质。

感兴趣的可以去 GitHub 看看。


相关链接

❌