You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移植Buffer.from()到Deno2,实现Node与Deno2跨环境兼容

跨Node/Deno2的Base64 Gzip解码实现

以下是无需额外NPM依赖、同时兼容Node和Deno2的实现代码:

// Node环境需提前导入zlib模块:import zlib from 'node:zlib';
// Deno环境无需额外导入

function from_base64_gzip(str) {
  // 跨环境Base64解码为二进制数据
  let binaryData;
  if (typeof Buffer !== 'undefined') {
    // Node环境:用Buffer直接解码Base64
    binaryData = Buffer.from(str, 'base64');
  } else {
    // Deno环境:先解码Base64为字符串,再转为Uint8Array
    const decodedStr = atob(str);
    binaryData = new Uint8Array(decodedStr.length);
    for (let i = 0; i < decodedStr.length; i++) {
      binaryData[i] = decodedStr.charCodeAt(i);
    }
  }

  // 跨环境解压缩Gzip数据
  let decompressedData;
  if (typeof zlib !== 'undefined') {
    // Node环境:用zlib同步解压缩并转UTF-8字符串
    decompressedData = zlib.unzipSync(binaryData).toString('utf-8');
  } else {
    // Deno环境:用内置decompressSync解压缩,再转UTF-8字符串
    decompressedData = new TextDecoder('utf-8').decode(Deno.decompressSync(binaryData, "gzip"));
  }

  return JSON.parse(decompressedData);
}

关键实现说明

  • Base64解码适配:
    • Node端直接利用Buffer.from(str, 'base64')完成Base64到二进制的转换,这是Node的原生能力。
    • Deno端通过atob()解码Base64为ASCII字符串,再遍历字符串将每个字符的Unicode编码转为字节值,生成Uint8Array类型的二进制数据。
  • Gzip解压缩适配:
    • Node端使用内置的zlib.unzipSync同步解压缩,直接将结果转为UTF-8字符串。
    • Deno端使用内置的Deno.decompressSync(需指定"gzip"格式),再通过TextDecoder将二进制数据转为UTF-8字符串。
  • 环境判断逻辑:通过检查全局对象中Buffer和zlib的存在性区分Node/Deno环境,无需额外依赖。

内容的提问来源于stack exchange,提问作者Jeroen Ooms

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 16:02:39