Remix作者怒指Next.js抄袭

1,615 阅读4分钟

Remix 与 Next.js 又对上了。

时间线:5 月 23 日,Remix.js 发布了 React Router v6.4.0-pre.2(github.com/remix-run/r…) ,5 月 24 日,Next.js 发布了 Layouts RFC(nextjs.org/blog/layout…)

5 月 24 日早上,Remix 作者 Ryan Florence 在其 Twitter 上怒斥 Next.js,称其在没有打招呼也没有致谢声明的情况下,在最新发布的 Layouts RFC 里面抄袭了 Remix 的功能。Remix 团队对于此事的态度是:“Remix 觉得无所谓,我们的目光专注在帮助 React Router SPA 从服务器处受益。至于 Next.js 会不会逐渐变成 Remix,这对我们来说无关紧要。我只是认为,他们(Next 团队)可以承认我们取得的共同进步。”

并且,他还炮轰了现在的 React 团队:“我说真的,现在 React 真的有多开放?在我看来,它就应该被转移到一个基金会。”

图片

与此同时,Next.js 官宣 Layouts RFC 发布的推文下面,也同样有人提出质疑——这完全就是 Remix!Next.js 把路由文件夹的名字命名为 app,就是在欲盖弥彰。

Alex @agctyz: lmao this is literally @remix_run , even calling the new routes folder "app"

Remix 与 Next.js 互为竞争对手,较劲已久。数月前,Remix 作者 Ryan Florence 还曾发布一篇题为《Remix vs Next.js》的文章,他在文中称,Remix 是要胜过 Next.js 的。因此,这两个框架前后脚发布新版本并不稀奇,但出乎意料之外的是,此次更新,竟然引发了一场“抄袭风波”。

文章地址:

Remix 究竟比 Next.js 强在哪儿?

Next.js :我们的原型比 Remix 更早

Ryan Florence 发文中提到的“沙皇”,正是去年刚从 Meta 离职加入 Vercel 的 Sebastian Markbåge,他也是被外界熟知的 React 团队的灵魂人物。

对于本次事件,Sebastian Markbage 回应称,Layouts RFC 的原型并不是 Remix,甚至它的第一个原型是在 Remix 可用之前开始的。它的灵感更多地来自于带有 React Router 的传统服务器路由技术(比如 FB),这一点和 Next.js 有些不谋而合,“因此,在这种情况下,我认为这更多的是一种趋同进化。”

图片

Sebastian Markbåge 列出了一系列证据(详见:twitter.com/sebmarkbage… 大致意思为:原来每次导航都要从根组件开始做树形遍历更新,后来他想做成只针对更改的数据做局部更新,加上其他一些必要的但当时还缺失的功能。最开始原型是由 React.js 核心开发 Dan Abramov 和他一起制作的。而当他加入 Next.js 团队之后,则与 Tim Neutkens、Delba Oliveira、Lee Robinson、@shuding_、@huozhi 等人一起合作,对 RSC 做了一些修正和迭代,最后才在 Next.js 里面支持了 RSC。

但有吃瓜网友反驳称,并没有看见 Next.js 在致谢声明里提到 React router。

随后,Vercel 的开发者关系负责人 Lee Robinson 发文表示,已经更新了 RFC,感谢 Relay、React Router、Ember、SvelteKit 以及 @cassidoo 给早期的 Layout RFC 带来的启发。

图片

网友:做得早不重要,做得好才重要

在双方对阵的间隙,吃瓜网友纷纷现身,部分热评如下。

jaykay.eth@jkcorrea_:相反,Next.js 过于臃肿,你只能在 Next.js 中找到一堆概念。在加上“受 Remix 激发”的 API 之前,他们需要进一步扩展。但即便如此,他们也会让大量想要 SSG/ISR 的用户感到不安(Remix 就不存在这个困扰)。说了这么多,对 Vercel 来说这确实有点烦人,但请继续关注 Remix 的独特之处,最终功劳将归于它应去之处。

Andy Ingram @andrewingram:第一部分并不完全正确。你总是能够对回应做任何你想做的事情,他们只是从来没有大声疾呼,这是一种耻辱。但多年来(至少 3 年)我一直在用 Next 做状态码甚至缓存 Header。

Christian de Botton @cdebotton:在 Remix 之前,Sapper 就支持了嵌套路由,你可能也有类似的实现,但是你能说一下你又在哪里致谢了它(毕竟它为你铺平了道路)吗?此外,在 React 还没有出现之前,我就在 Ember 中编写了显示子路由内容的组件。

其中,一位名为 Antonio Sarcevic 的开发者吸引了我们的注意。他认为,谁做得早不重要,谁做得好才重要。

事实上,概念和思路的雷同,很难被判定为抄袭,除非代码一模一样。那么,对于此事,你是怎么看的?