创建一个双模式跨运行时的 JavaScript 包,你学会了吗( 二 )

现在,运行 deno task build 0.0.1 时将生成 npm 包 。
Node优先方法或者,你也可以选择Node优先的方法来创建跨运行时包 。
第一步是确保你的项目同时支持 ESM 和 CommonJS 。这既可以手动完成,也可以使用构建工具来处理 。代码库最好是非转译的 javascript 或 typescript,以便 Rollup 或类似工具处理 。
让我们以 @hexagon/base64 库为例进行分析 。该库使用 Rollup 生成 ESM 和 CommonJS 版本的代码,配置如下:
// rollup.config.jsexport default [ {input: "./src/base64.single.js",output: {file: "dist/base64.cjs",format: "umd",name: "base64",exports: "default"} }, {input: "./src/base64.js",output: {file: "dist/base64.mjs",format: "es"} }];该库的源代码(/src/base64.js)是以各种方式导出 base64 对象的普通 ES JavaScript 。
// src/base64.js/* ...Library code making up the base64 object... */// Default exportexport default base64;// Named exportexport { base64 };Rollup 无法处理多重导出,因此我还创建了一个 /src/base64.single.js,默认情况下它只负责重新导出 base64 对象 。这是 Rollup 配置的 UMD 目标所使用的 。
// /src/base64.single.jsimport base64 from "./base64.js";export default base64;package.jsonpackage.json 文件是设置双模式、跨运行时 JavaScript 包的关键 。它决定了包在不同环境中的结构和行为方式 。让我们来仔细看看其中的关键部分及其重要性:
{/* ... your metadata ... */"scripts": {/* ... your existing build steps ... */"build:dist": "rollup -c ./rollup.config.js",},"type": "module","main": "./dist/base64.cjs","browser": "./dist/base64.min.js","module": "./src/base64.js","types": "types/base64.single.d.ts","exports": {".": {"import": "./src/base64.js","require": "./dist/base64.cjs","browser": "./dist/base64.min.js"}}}

  • 「"scripts"」 :该部分包含构建和管理包所需的脚本 。在提供的示例中 , "build:dist"用于触发 Rollup 打包过程 。根据包的具体要求,你可能还需要其他脚本来进行测试、检查或执行其他任务 。
  • 「"type"」 :该字段设置为"module",表示你的包是为使用 ESM(ES 模块)导入而设计的 。
  • 「"main"」 :该字段指定了 CommonJS 环境(如 Node.js)的入口点 。它指向包的 CommonJS 版本,通常位于 dist 目录中 。
  • 「"browser"」 :该字段用于指定浏览器环境的替代入口点 。它指向包的最小化版本,以增强与浏览器的兼容性 。
  • 「"module"」 :与 "main"字段类似,该字段用于指定 ESM 环境的入口点 。它指向软件包的 ESM 版本 。
  • 「"types"」 :此字段指明软件包的 TypeScript 声明文件(.d.ts)的位置 。这些文件为 TypeScript 用户提供了类型信息,改善了开发人员的体验 。
  • 「"exports"」 :该字段是一项最新功能,允许你定义如何导入包 。它为 ESM、CommonJS 和浏览器环境指定了不同的导入路径,确保了跨运行时的流畅兼容性 。
根据包的具体需求和配置 , 你可能需要对 package.json 进行或多或少的修改 。仔细调整和测试该文件以确保其在发布时正常运行至关重要 。
跨运行时部分前面提到的步骤主要是在 Node.js 中设置双模式兼容性 。虽然 Deno 可以使用开箱即用的 npm 软件包,但要创建一个完整的跨运行时包,你还应该将其适配到 Deno 。
这包括阅读 Deno 库的工作原理[2]、将软件包发布到 deno.land/x[3] 。
还有就是,让你的软件包成为双模式软件也能帮助其他项目 。
总结创建双模式、跨运行时的 JavaScript 包是一种有益的体验 。它能使你的代码具有可移植性和可重用性,让你在不同的 JavaScript 环境中接触到更多的用户 。虽然会有一些障碍和注意事项,如管理兼容性以及与不同模块系统和运行时的配合,但利大于弊 。
本文译自:https://hexagon.56k.guru/posts/dual-mode-cross-runtime-packages/
以上就是本文的全部内容,如果对你所有帮助,欢迎点赞、收藏、转发~
参考资料[1]GitHub:https://github.com/denoland/dnt


推荐阅读