Angular 11升级后zlib库报错:无法解析'./zlib_bindings'模块
解决Angular 11中zlib库的模块找不到问题
问题根源
你用的zlib包是Node.js专属的原生依赖,依赖底层C++绑定(zlib_bindings),但Angular运行在浏览器环境,根本加载不了这类Node专属模块,所以才会报找不到./zlib_bindings的错误。另外你代码里的inflateSync用法也错了——同步方法是直接返回结果的,不需要传回调,回调是异步inflate方法的用法。
解决步骤
换成浏览器兼容的纯JS压缩库pako,具体操作如下:
- 安装pako
npm install pako --save
- 修改代码
import pako from 'pako'; // 把base64转成浏览器支持的Uint8Array(替代Node的Buffer) const uint8Array = Uint8Array.from(atob(data), char => char.charCodeAt(0)); try { // 同步解压数据 const decompressedData = pako.inflateSync(uint8Array); // 把二进制数据转成字符串 const resultStr = new TextDecoder().decode(decompressedData); this.excelService.export(`xxx${base.name}`, resultStr); } catch (err) { console.error('解压失败:', err); }
额外说明
- pako是纯JavaScript实现的zlib兼容库,完全适配浏览器环境,不需要依赖任何Node原生模块
- 浏览器里没有Node的
Buffer对象,用atob配合Uint8Array转换base64数据更稳妥 inflateSync作为同步方法,出错会直接抛出异常,所以要用try/catch捕获错误
内容的提问来源于stack exchange,提问作者nicamoyanof
相关产品推荐
相关产品推荐

