河南梦之网网络科技有限公司
梦之网科技出品
扫描关注梦之网科技微信公众账号

扫小程序码联系客服

JavaScript工具为什么这么难用?-梦之网科技

梦之网科技2019-09-30文章动态

译者丨核子可乐

JavaScript 工具确实超级难用,但这并不是大家的错。

如果大家点进来看了,就证明各位肯定对此抱有同感。哈哈,我也这么觉得。我的日常工作就是跟 JavaScript 工具打交道,而我的观点是,这些工具至少可以做得更好。毕竟“无视问题,就是作恶”。

但不少朋友可能也并不认同我的观点,别担心,其实我自己也并不完全认同文章的标题。但是,各位或多或少都在生活当中遇到过 JavaScript 工具很不好用的情况。作为 JavaScript 开发者,我们花了很多时间来学习如何修复并掩盖自己使用的工具,但却很少问问自己这一切到底是为什么。(当然,这也非常正常,我会在后文中展开来讨论。)

最后,如果您点开这篇文章只是为了拓展一下思路……呃,真的有这么客观冷静的读者朋友吗?无论如何,同样欢迎您的光临。

当然,以上都是假设,而不是客观事实。我想做的只是解释和分析,而非粗暴判断。我的所有博文都出于自己当下的观点,我的观点经常会变。而且我也要强调一点:本文只谈缺点,暂时不涉及 JS 工具那些重要的优势。

1

JavaScript 在最初设计上与当前使用场景不符

JavaScript 工具之所以这么烂,是因为 JavaScript 在最初设计上就没有考虑到关键业务工具与应用程序的需求。

JS 的开发周期是出了名的快——整个过程不到 10 天,而且当时没人想得到软件会吞噬整个世界、浏览器软件会吞噬操作系统软件,而 JavaScript 又能跳过浏览器在操作系统中占据一席之地。

JS 的文化无疑继承自其最初设计与决策。凭借着易于启动与运行的特性,JS 为众多程序员打开了开发的大门;但一系列缺陷也由此而来,包括未定义属性访问不会导致运行时错误,乃至著名的“undefined 并不是函数”错误等等。我之所以将 JS 目前的很多问题归结为一种“原罪”,是因为 JS 的本性确实非常独特,也使得很多开发者始终拒绝在 JS 当中添加编译时间检查机制。更有甚者,不少“极端分子”甚至拒绝使用 Prettier。

Web Assembly 可能终有一天会解释那些不想使用 JS、但却没有更好选择的开发人员,但在此之前,他们仍然得继续忍耐下去。

这就意味着……

2

庞大的社区

JavaScript 工具之所以这么烂,是因为它不是单纯为某一类用户打造的。

作为地球最庞大的非电子表格编程语言,无论是代码风格、软件交付还是测试方法,开发人员们都能为此爆发出激烈的争夺——甚至上升到宗教战争级别的口诛笔伐。其中最具争议的工具当数 Babel!

虽然庞大的技术社区通常是项目具有活力的表现,但同时也会带来种种人们意识不到的问题。正所谓林子大了,什么鸟都有;每个人其实都有着非常具体,甚至是相互矛盾的诉求。因此,我们越来越难以“做好一件事”来让每个人都开心。

让人们开心的最简单方法,当然是在配置之后再另配置,这就是我们的主要工作内容。然而,这种方式既会带来地狱般的复杂配置体系,也将严重影响工具之间的互操作性。我个人非常赞成 Jared Palmer 的观点,即应当只关注主干结构以及 80% 的用例。另外,我也建议很多用户尝试使用 patch-package 等工具维护自己的低成本分叉。

大社区好是好,但会导致……

3

不过变化的目标,不过变化的边界

JavaScript 工具之所以这么烂,是因为它在设计之初并未考虑到单一目标运行时。

很多人提出,JS 库是否应当能够同时在浏览器与 Node 当中运行?有人不太赞成。

此外,人们也不赞成 JS 工具应当转换自身依赖关系的观点。人们也不希望处理遗留浏览器的问题。随着时间的推移,这方面问题会越来越小,但得承认问题仍然存在。Create-React App 已经就此进行了长达两年的讨论。

人们也不愿对工具进行重复测试。Kent C Dodds 在 JS 测试方面做了大量工作,但时至今日仍有不少工具还完全没有完成自己的审查——这一点在 Windows 等不同环境中表现得尤为突出。甚至有意见指出,没有工具可能都要好于使用一大堆未经测试的工具。

最后,人们也无法在工具需要解决的问题方面达成一致。举个极端的例子,这就像是初学者询问 A 和 B 之间有何差异(因为二者经常相互替代),而维护者回答称 A 与 B 属于“正交关系”。但事实上,A 的专家(只关注 A)对 B 的专家(只关注 B)一直非常不满。

更要命的是,有时候我们似乎距离达成一致就只差一步,但这时候边界线变了——带来了新的争议与难题。在这种情况下,人们宁愿在彼此之间的争议身上投入精力和时间,而不愿支持并提醒对方还有更重要的大方向需要把控。这必然会让参与者们最终都筋疲力尽。

这又会导致……

4

无人负责

JavaScript 工具之所以这么烂,是因为它是自下而上创造出来的——而非自上而下。

JavaScrip 不只是一种语言,也不存在“JavaScript SDK”或者“标准库”。

文章关键词
浏览器
开发人员
JS
javascript