前端地震!core-js作者放弃开源?

家好,很高兴又见面了,我是"高级前端 进阶 ",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!

高级前端 进阶

前言

core-js 作者 Denis Pushkarev 最近发表了一篇长文《So, what's next?》,他表示最近发生的事情让自己颇有感慨,于是用很大篇幅讲述了自己的开源经历和遭遇以及心态变化。

从 Denis 的经历来看,放弃高薪工作来维护 core-js 完全就是为爱发电,即使 core-js 的用户数达到了惊人的量级,但鲜有人愿意为他投入的时间和精力支付酬劳。

Denis 表示,自己曾在GitHub 和 npm 的主页 README 中发布过筹款信息,但最后一个月只收到了 57 美元的捐赠。为此,他还在 core-js 的 CLI 中添加了相应的求职信息,却引来了许多不友好的回应。因此,作者有可能考虑闭源core-js!具体事情的脉络可以参考文末的资料,本文不再深入展开,将会将重点放在core-js,即这个核心的库上面。

1.什么是core-js?

什么是core-js?

Core-js是JavaScript 的模块化标准库。 包括 ECMAScript 的 Polyfill 到 ES2023,主要囊括:Promise、Symbol、Collections、 Iterators、 Typed Arrays,、类型数组以及许多其他特性、ECMAScript 提案、一些跨平台的 WHATWG/W3C 特性和提案等等。

将上面的简短介绍拆开来看,主要包括以下核心特性

2.Core-js的开发者数据

从Github的数据来看,core-js项目已经创建超过了10年时间,最新版本为2.28.0,Github上的star数量达到了19.6k,fork数据也达到了1.5k。

core-js的github数据

从NPM的月下载数据来看,在2022年1月左右core-js月下载量达到了惊人的2亿,即使按周维度来看,NPM的周下载量在最近一周也达到了惊人的35,114,396,即3500W左右。

core-js每月下载量

将core-js的下载周期拉长到最近一年,从下图可以看出下载量基本是趋于平缓的(除了2022年12月的一个低谷)。

core-js最近一年下载量

从以上开发者数据来看,core-js确实是前端界的璀璨明珠,如果将其闭源,那么将会有太多项目受到影响。根据Github Gits的2023/02/6号的官方数据,目前core-js的项目依赖量是惊人的,达到了9369个,在所有库的项目依赖量中排名33位(第一名是lodash,确实是比较诧异)。

core-js的项目依赖量数据

3.Core-js使用示例

3.1 全局引入

import 'core-js/actual';
Promise.resolve(42).then(it => console.log(it)); // => 42

Array.from(new Set([1, 2, 3]).union(new Set([3, 4, 5]))); // => [1, 2, 3, 4, 5]

[1, 2].flatMap(it => [it, it]); // => [1, 1, 2, 2]

(function * (i) { while (true) yield i++; })(1)
  .drop(1).take(5)
  .filter(it => it % 2)
  .map(it => it ** 2)
  .toArray(); // => [9, 25]

structuredClone(new Set([1, 2, 3])); // => new Set([1, 2, 3])

3.2 按需引入

也允许开发者仅加载所需的功能:

import 'core-js/actual/promise';
import 'core-js/actual/set';
import 'core-js/actual/iterator';
import 'core-js/actual/array/from';
import 'core-js/actual/array/flat-map';
import 'core-js/actual/structured-clone';
Promise.resolve(42).then(it => console.log(it)); // => 42

Array.from(new Set([1, 2, 3]).union(new Set([3, 4, 5]))); // => [1, 2, 3, 4, 5]

[1, 2].flatMap(it => [it, it]); // => [1, 1, 2, 2]

(function * (i) { while (true) yield i++; })(1)
  .drop(1).take(5)
  .filter(it => it % 2)
  .map(it => it ** 2)
  .toArray(); // => [9, 25]

structuredClone(new Set([1, 2, 3])); // => new Set([1, 2, 3])

3.3 不污染全局变量

在没有全局命名空间污染的情况下使用Core-js:

import Promise from 'core-js-pure/actual/promise';
import Set from 'core-js-pure/actual/set';
import Iterator from 'core-js-pure/actual/iterator';
import from from 'core-js-pure/actual/array/from';
import flatMap from 'core-js-pure/actual/array/flat-map';
import structuredClone from 'core-js-pure/actual/structured-clone';

Promise.resolve(42).then(it => console.log(it)); // => 42

from(new Set([1, 2, 3]).union(new Set([3, 4, 5]))); // => [1, 2, 3, 4, 5]

flatMap([1, 2], it => [it, it]); // => [1, 1, 2, 2]

Iterator.from(function * (i) { while (true) yield i++; }(1))
  .drop(1).take(5)
  .filter(it => it % 2)
  .map(it => it ** 2)
  .toArray(); // => [9, 25]

structuredClone(new Set([1, 2, 3])); // => new Set([1, 2, 3])

更多关于core-js的用法可以参考文末的资料。

4.本文总结

本文主要和大家介绍下这两天前端圈的大事,即core-js作者通过readme来表达自己遭遇的变故,以及core-js目前开源遇到的诸多问题。同时对Core-js是什么,core-js怎么用做了简单的介绍。如果有兴趣,文末的参考资料提供了大量优秀文档以供学习。


参考资料

https://www.oschina.net/news/228389/corejs-maintainer-so-whats-next

https://www.npmjs.com/package/core-js

https://github.com/zloirock/core-js/blob/master/README.md

https://github.com/zloirock/core-js#readme

展开阅读全文

页面更新:2024-05-23

标签:下载量   进阶   提案   开发者   全局   特性   惊人   功能   项目   作者   数据

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top