html-to-text: تبدیل HTML به متن ساده با Node.js
خلاصهٔ کاملتر
html-to-text یه کتابخانهی پیشرفته برای Node.js هست که HTML رو parse میکنه و یه متن تمیز و خوانا برمیگردونه. این ابزار مشکل رایجی رو حل میکنه: وقتی نیاز داری محتوای HTML رو بدون تگها، به فرمت plain text داشته باشی — مثلاً برای ارسال ایمیل متنی، ایندکسکردن محتوا، یا نمایش در ترمینال.
از قابلیتهای اصلیش میشه به اینا اشاره کرد: پشتیبانی از تگهای inline و block، جدولهای پیچیده با colspan و rowspan، لینکها با متن و href، شکستن خطوط بلند (word wrapping)، پشتیبانی کامل از یونیکد، و گزینههای زیاد برای شخصیسازی. حتی یه CLI هم داره که به صورت پکیج جداگانه @html-to/text-cli منتشر شده.
سادهترین روش استفاده، صدا زدن تابع convert هست. کافیه HTML رو بهش بدی و گزینههایی مثل wordwrap رو تنظیم کنی:
const { convert } = require('html-to-text');
const options = { wordwrap: 130 };
const html = '<div>Hello World</div>';
const text = convert(html, options);
console.log(text); // Hello Worldاما اگه قراره تعداد زیادی سند رو با یه تنظیمات یکسان پردازش کنی، خود تیم توسعهدهنده توصیه میکنه از تابع compile استفاده کنی. این روش پرفورمنس خیلی بهتری داره چون تنظیمات فقط یه بار پردازش میشن:
const { compile } = require('html-to-text');
const compiledConvert = compile({ wordwrap: 130 });
const htmls = ['<div>Hello World!</div>', '<div>こんにちは世界!</div>'];
const texts = htmls.map(compiledConvert);
console.log(texts.join('\n'));تنظیمات این کتابخانه خیلی گستردهست. میتونی با baseElements.selectors مشخص کنی کدوم بخشهای HTML تبدیل بشن، با limits حجم خروجی رو کنترل کنی (مثلاً maxDepth، maxChildNodes یا maxInputLength)، و با formatters رفتار تگهای خاص رو کاملاً سفارشی کنی. مقدار پیشفرض maxInputLength برابر ۱۶ مگابایت هست که برای اکثر کاربردها کافیه.
نسخهی ۱۰ این پکیج یه release نگهداریمحور هست که مشکلات سازگاری رو برطرف کرده و نیاز به Node.js 20.19.0 به بالا و ES2022 داره. پکیج هم به صورت dual-mode یعنی هم CJS هم ESM قابل استفادهست.
نکات کلیدی:
- تابع
convertبرای تبدیل سریع یه سند HTML به متن ساده کافیه - برای پردازش دستهای،
compileرو به خاطر پرفورمنس بهتر انتخاب کن - پشتیبانی از جدولهای پیچیده، یونیکد، و word wrapping از مزایای کلیدی این کتابخانهست
- با
baseElements.selectorsمیتونی دقیقاً مشخص کنی کدوم بخشهای HTML تبدیل بشن - نسخه ۱۰ نیاز به Node.js 20.19.0+ داره و هم CJS هم ESM رو پشتیبانی میکنه




