大家好,很高兴又见面了,我是"高级前端 进阶 ",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!
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,即这个核心的库上面。
Core-js是JavaScript 的模块化标准库。 包括 ECMAScript 的 Polyfill 到 ES2023,主要囊括:Promise、Symbol、Collections、 Iterators、 Typed Arrays,、类型数组以及许多其他特性、ECMAScript 提案、一些跨平台的 WHATWG/W3C 特性和提案等等。
将上面的简短介绍拆开来看,主要包括以下核心特性:
从Github的数据来看,core-js项目已经创建超过了10年时间,最新版本为2.28.0,Github上的star数量达到了19.6k,fork数据也达到了1.5k。
从NPM的月下载数据来看,在2022年1月左右core-js月下载量达到了惊人的2亿,即使按周维度来看,NPM的周下载量在最近一周也达到了惊人的35,114,396,即3500W左右。
将core-js的下载周期拉长到最近一年,从下图可以看出下载量基本是趋于平缓的(除了2022年12月的一个低谷)。
从以上开发者数据来看,core-js确实是前端界的璀璨明珠,如果将其闭源,那么将会有太多项目受到影响。根据Github Gits的2023/02/6号的官方数据,目前core-js的项目依赖量是惊人的,达到了9369个,在所有库的项目依赖量中排名33位(第一名是lodash,确实是比较诧异)。
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])
也允许开发者仅加载所需的功能:
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])
在没有全局命名空间污染的情况下使用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的用法可以参考文末的资料。
本文主要和大家介绍下这两天前端圈的大事,即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
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号