DE EN ES FR ID JA KO PT RU TH VI ZH

Установка

Cheerio — это серверная реализация основного функционала jQuery, специально разработанная для Node.js окружений. Это руководство охватывает все способы установки и настройки Cheerio в ваших проектах.

Установка через Package Manager

npm

npm install cheerio

yarn

yarn add cheerio

pnpm

pnpm add cheerio

bun

bun add cheerio

Синтаксис Import

ESM (ES Modules) - Рекомендуется

import * as cheerio from 'cheerio';

// Load HTML and create a Cheerio instance
const $ = cheerio.load('<h2 class="title">Hello world</h2>');

// Manipulate elements
$('h2.title').text('Hello there!');
$('h2').addClass('welcome');

console.log($.html());
// => <html><head></head><body><h2 class="title welcome">Hello there!</h2></body></html>

CommonJS

const cheerio = require('cheerio');

const $ = cheerio.load('<h2 class="title">Hello world</h2>');
$('h2.title').text('Hello there!');

Деструктурирующие Import

// Import specific functions
import { load, contains, merge } from 'cheerio';

const $ = load('<ul><li>Apple</li><li>Orange</li></ul>');

Настройка TypeScript

Cheerio поставляется со встроенными определениями TypeScript. Дополнительный package @types не требуется.

Базовое использование TypeScript

import * as cheerio from 'cheerio';
import type { CheerioAPI, Element } from 'cheerio';

const html = '<div class="container"><p>Hello</p></div>';
const $: CheerioAPI = cheerio.load(html);

// Type-safe element selection
const elements: cheerio.Cheerio<Element> = $('.container p');
const text: string | undefined = elements.text();

Продвинутое использование типов

import type { AnyNode, CheerioOptions } from 'cheerio';

const options: CheerioOptions = {
  xmlMode: true,
  decodeEntities: false
};

const $ = cheerio.load('<xml><item>data</item></xml>', options);

Поддержка окружений

Требования к Node.js

Ограничения браузера

⚠️ Важно: Cheerio не предназначен для браузерных окружений. Это серверная библиотека, которая:

Для браузерных окружений используйте jQuery или современные DOM API.

Продвинутые методы загрузки

Загрузка из Buffer

import * as cheerio from 'cheerio';
import * as fs from 'fs';

// Load from buffer with encoding detection
const buffer = fs.readFileSync('index.html');
const $ = cheerio.loadBuffer(buffer);

Загрузка из URL

import * as cheerio from 'cheerio';

// Fetch and parse HTML from a URL
const $ = await cheerio.fromURL('https://example.com');
console.log($('title').text());

Потоковая обработка HTML

import * as cheerio from 'cheerio';
import * as fs from 'fs';

// Parse HTML streams
const writeStream = cheerio.stringStream({}, (err, $) => {
  if (err) {
    console.error('Parse error:', err);
    return;
  }
  
  console.log($('h1').text());
});

fs.createReadStream('document.html', { encoding: 'utf8' })
  .pipe(writeStream);

Опции конфигурации

Опции парсера

import * as cheerio from 'cheerio';

const $ = cheerio.load(html, {
  // Use XML mode for XML documents
  xmlMode: false,
  
  // Decode HTML entities
  decodeEntities: true,
  
  // Set base URI for resolving relative URLs
  baseURI: 'https://example.com',
  
  // Enable/disable scripting
  scriptingEnabled: false
});

Распространенные проблемы установки

Конфликты версий Node.js

Ошибка: Cannot find module 'cheerio' или предупреждения о совместимости

Решение: Убедитесь, что используете Node.js 18.17 или выше:

node --version
# Should show v18.17.0 or higher

# Update Node.js if needed
npm install -g n  # For Unix systems
n latest

Проблемы с модулями ESM/CommonJS

Ошибка: require() of ES Module или операторы import в CommonJS

Решение: Убедитесь, что ваш package.json содержит правильный тип module:

{
  "type": "module"
}

Или используйте подходящий синтаксис import для вашего окружения.

Конфигурация TypeScript

Ошибка: Ошибки компиляции TypeScript с типами Cheerio

Решение: Обновите ваш tsconfig.json:

{
  "compilerOptions": {
    "moduleResolution": "node",
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true
  }
}

Проблемы с памятью при работе с большими документами

Ошибка: JavaScript heap out of memory

Решение: Увеличьте лимит памяти Node.js:

node --max-old-space-size=4096 your-script.js

Или обрабатывайте документы меньшими частями, используя потоковые методы.

Проблемы с кодировкой

Ошибка: Неправильная кодировка символов в парсированном HTML

Решение: Используйте loadBuffer() с явными опциями кодировки:

const $ = cheerio.loadBuffer(buffer, {
  encoding: {
    defaultEncoding: 'utf8'
  }
});

Проверка

Убедитесь, что ваша установка работает корректно:

import * as cheerio from 'cheerio';

const $ = cheerio.load('<h1>Test</h1>');
console.log($('h1').text()); // Should output: "Test"

// Check version
console.log('Cheerio version:', cheerio.version || 'Version info not available');

С выполненными шагами установки вы готовы начать парсинг и манипулирование HTML с помощью мощного, похожего на jQuery API Cheerio в ваших Node.js приложениях.