Termux中转换TXT到XLSX时触发JavaScript堆内存溢出错误
解决Termux中Node.js转换TXT到XLSX时的内存溢出问题
你遇到的「Reached heap limit Allocation failed - JavaScript heap out of memory」错误,是因为Node.js默认的V8堆内存上限不足以加载你要处理的TXT文件(尤其是文件较大时),加上Termux本身运行在移动设备上,可用内存有限,更容易触发这个问题。以下是几种解决办法:
1. 临时提升Node.js内存限制
运行脚本时,通过--max-old-space-size参数手动调整V8的堆内存上限,数值根据你的设备可用内存调整(比如2048代表2GB,4096代表4GB):
node --max-old-space-size=4096 your-script-name.js
注意:不要设置超过设备实际可用的内存,否则可能导致系统卡顿或崩溃。
2. 分批处理大文件(推荐)
如果你的TXT文件体积很大,不要一次性读取整个文件到内存,改用流的方式分批处理,避免占满堆内存。示例代码如下:
const prompt = require('prompt-sync')(); const fs = require('fs'); const readline = require('readline'); const XLSX = require('xlsx'); const inputPath = prompt('Type the file directory to use: '); const outputName = prompt('Type the output file name: '); const outputPath = `/storage/emulated/0/Download/${outputName}.xls`; // 创建工作表对象 const ws = XLSX.utils.aoa_to_sheet([]); const wb = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, ws, 'Sheet1'); // 逐行读取TXT文件 const rl = readline.createInterface({ input: fs.createReadStream(inputPath), crlfDelay: Infinity }); let rowIndex = 0; rl.on('line', (line) => { // 按你的TXT分隔符分割行数据,比如逗号、制表符,这里假设是逗号 const rowData = line.split(','); // 将行数据写入工作表 XLSX.utils.sheet_add_aoa(ws, [rowData], { origin: rowIndex }); rowIndex++; }); rl.on('close', () => { // 写入XLSX文件 XLSX.writeFile(wb, outputPath); console.log('转换完成'); });
注意:根据你的TXT文件实际格式(比如分隔符是制表符\t还是其他),修改line.split(',')里的分隔符。
3. 提前压缩或拆分大文件
如果上述方法还是不行,可以先把大TXT文件拆分成多个小文件,逐个转换后再合并XLSX;或者用工具压缩TXT文件(比如去除空白行、重复内容),减少文件体积后再处理。
内容的提问来源于stack exchange,提问作者just you
相关产品推荐
相关产品推荐

