ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

core-js 在 Deno 中的使用指南:用 `deno/corejs` 一键补齐 JavaScript 标准库

core-js 在 Deno 中的使用指南:用 `deno/corejs` 一键补齐 JavaScript 标准库 core-js 在 Deno 中的使用指南用deno/corejs一键补齐 JavaScript 标准库【免费下载链接】core-jsStandard Library项目地址: https://gitcode.com/GitHub_Trending/co/core-js导读deno/corejs是 core-js 为 Deno 运行时专门发布的打包版全局模块Bundled Global Version它把 core-js 的核心 polyfill 通过 webpack 压缩为单一文件index.js开发者只需在入口文件顶部执行一次import即可让 Deno 1.0 环境获得 ECMAScript 标准特性、提案特性和跨平台 Web 标准的完整支持。阅读本文后你将掌握在 Deno 项目中安装与加载deno/corejs的正确姿势理解它提供的能力边界Promise、Symbol、集合、迭代器、TypedArray 与提案特性等并学会用源码与测试印证其行为。一、deno/corejs是什么在仓库中deno/corejs目录只包含三个文件入口文件 index.js、说明文档 README.md 与 LICENSE。根据 index.js 头部的版权注释该文件是core-js 3.50.0的产物由 webpack 打包生成文件中包含完整的 webpackBootstrap 模块缓存、__webpack_require__模块加载器以及 500 个模块定义共 18366 行。从文档定位看README.md 明确指出Its a bundled global version for Deno 1.0for more info seecore-jsdocumentation。即它是面向Deno 1.0 及以上版本的全局版本polyfill 直接注入全局对象Object、Array、Promise、Symbol等与 npm 生态中core-js的全局污染模式一致而仓库根目录 README.md 中演示的core-js-pure才是不污染全局命名空间的纯函数版本。二者能力相同区别在于挂载方式。二、快速上手安装与加载deno/corejs不走 npm而是通过Deno 的 URL 导入机制直接引用。文档给出的唯一官方用法是在入口文件顶部导入import https://deno.land/x/corejsv3.50.0/index.js; // - at the top of your entry point要点必须放在入口文件的最顶部先于任何业务代码执行确保后续代码运行时 polyfill 已就位URL 中的v3.50.0是版本锚点与 index.js 中声明的 core-js 版本3.50.0一致。Deno 默认缓存远程模块重复运行不会重复下载该 URL 指向 Deno 官方模块托管平台deno.land/xdeno/corejs目录本身即是该托管包的仓库源。加载完成后即可直接使用标准库能力无需任何额外 importObject.hasOwn({ foo: 42 }, foo); // true [1, 2, 3, 4, 5, 6, 7].at(-3); // 5 [1, 2, 3, 4, 5].group(it it % 2); // { 1: [1, 3, 5], 0: [2, 4] } Promise.any([ Promise.resolve(1), Promise.reject(2), Promise.resolve(3), ]).then(console.log); // 1 (function * (i) { while (true) yield i; })(1) .drop(1).take(5) .filter(it it % 2) .map(it it ** 2) .toArray(); // [9, 25]验证运行时行为以Object.hasOwn为例Object.hasOwn在 index.js 中的实现是优先复用引擎原生方法否则回退为自有属性检查抽象操作module.exports Object.hasOwn || function hasOwn(it, key) { return hasOwnProperty(toObject(it), key); };对应的单元测试位于 tests/unit-global/es.object.has-own.js覆盖了仅返回自有属性create({ q: 42 })继承的属性返回false、对null/undefined抛TypeError、现代行为下不调用参数的toString等语义。运行方式为deno run --allow-read https://.../index.js加载后直接调用Object.hasOwn即可验证。三、能力全景一份打包版能提供什么根据 README.md 的定位描述core-js 是模块化的 JavaScript 标准库包含以下能力域能力域涵盖内容ECMAScript截至 2021 已定稿Promise、Symbol、集合Map/Set/WeakMap/WeakSet、迭代器、TypedArray 等ECMAScript 提案如Array.prototype.group、迭代器辅助方法drop/take/filter/map/toArray等跨平台 WHATWG / W3C 特性与提案如URL与URLSearchParams按需加载core-js 生态支持只加载所需特性npm 版通过import core-js/actual/promise等子路径实现见 README.md而deno/corejs是全量捆绑版一次导入覆盖所有能力适合作为 Deno 应用的全局基础垫片无全局命名空间污染的需求则应改用 npm 生态的core-js-pure纯函数版不修改原型与全局对象见 README.md。打包版内部结构速览从源码结构看index.js 的入口模块第 95 行起依次__webpack_require__数百个模块随后导出一个汇总模块。模块内部大量复用了 core-js 经典的基础设施例如全局对象探测模块 2依次检测globalThis/window/self/global/this最终回退到Function(return this)()见 index.jswell-known Symbol 注册模块 1如Symbol.asyncDispose并带 Node.js 20.4 的 descriptor 修复 workaround见 index.js运行时版本检测模块 20同时读取process.versions与Deno.version说明打包版显式考虑 Deno 运行时的 V8 版本信息用于特性能力判断见 index.js。可见这份单文件不是简单拼接而是保留了 core-js 全部运行时探测与能力降级逻辑的完整产物。四、用测试印证文档中的示例行为文档示例中的每一个 API 都能在仓库测试中找到对应的行为约定示例 API测试文件关键断言Array#grouptests/unit-global/esnext.array.group.js回调收到 3 个参数value/index/that、结果对象原型为null、不受species影响Array#attests/unit-global/es.array.at.js[1,2,3].at(-1) 3、[1,2,3].at(-3) 1Object.hasOwntests/unit-global/es.object.has-own.js自有属性才返回true对null/undefined抛TypeErrorPromise.anytests/unit-global/es.promise.any.js返回Promise实例、短路返回第一个成功结果其中Array#group的测试与文档示例口径完全一致如[1,2,3].group(it it % 2)的结果在 esnext.array.group.js 中同样得到{ 1: [1, 3], 0: [2] }说明文档示例并非示意而是严格对标的既定语义。迭代器链式操作drop(1).take(5).filter(...).map(...).toArray()对应 esnext 迭代器辅助方法提案测试同样位于 tests/unit-global 目录下如es.iterator.drop.js、es.iterator.take.js、es.iterator.filter.js、es.iterator.map.js、es.iterator.to-array.js。五、配套的 Deno 兼容性测试设施仓库对 Deno 的支持不止于交付打包版还提供了专门的兼容性测试入口 tests/compat/deno-runner.mjsimport ./tests.js; import ./compat-data.js; import ./common-runner.js; if (Deno.args.includes(json)) { console.log(JSON.stringify(globalThis.results, null, )); } else globalThis.showResults(deno, console.log);该 runner 导入统一的测试与兼容数据执行后把结果写入globalThis.results可通过deno run tests/compat/deno-runner.mjs json输出 JSON 格式的兼容性报告。这意味着在 Deno 上验证 polyfill 行为、生成引擎兼容性数据是仓库 CI/研究流程的一部分也印证了deno/corejs交付物是经过持续测试的正式产物。六、适用前提与注意事项版本前提deno/corejs要求 Deno 1.0见 README.md示例导入 URL 锚定v3.50.0升级 core-js 时应同步更新 URL 中的版本号全局注入语义它是 global 版本会修改全局对象与内建原型例如在Array.prototype上注入at、group适合应用入口统一垫底若需隔离性请改用 npm 生态的core-js-pure只提供运行时 polyfilldeno/corejs不做语法转译如可选链、装饰器等需要编译器处理它只负责补齐运行时缺失的标准库 API入口顶部导入务必放在所有依赖与业务模块执行之前否则可能因初始化顺序导致部分 API 在使用时尚未注入。七、进一步阅读完整特性清单与 npm 版安装/构建说明README.md打包版源码webpack 产物含全部运行时探测逻辑deno/corejs/index.jsDeno 兼容性测试入口tests/compat/deno-runner.mjs特性行为约定测试tests/unit-global如 es.object.has-own.js、esnext.array.group.js【免费下载链接】core-jsStandard Library项目地址: https://gitcode.com/GitHub_Trending/co/core-js创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表