Управление зависимостями

Puppeteer — это библиотека для управления браузером Chrome или Chromium через протокол DevTools. Для работы с ней в проекте на Node.js необходимо добавить зависимость через npm или yarn:

npm install puppeteer

yarn add puppeteer

После установки подключение выполняется стандартным require или import:

const puppeteer = require('puppeteer');
// или с использованием ES-модулей
import puppeteer from 'puppeteer';

Важно понимать, что Puppeteer поставляется с собственной версией Chromium, что делает установку достаточно тяжёлой, но гарантирует совместимость с API.

Управление версиями Puppeteer

Для стабильности тестов необходимо контролировать версии Puppeteer и браузера. Рекомендуется фиксировать версию в package.json:

"dependencies": {
  "puppeteer": "21.3.0"
}

Использование тегов вроде ^ может привести к неожиданным несовместимостям с API при обновлении. Для специфических проектов возможно подключение внешнего браузера:

const browser = await puppeteer.launch({
  executablePath: '/usr/bin/google-chrome-stable'
});

Это позволяет использовать системный Chrome вместо встроенного Chromium и управлять окружением более гибко.

Установка дополнительных зависимостей

Puppeteer часто используется вместе с Jest, Mocha или другими тестовыми фреймворками. Для корректной работы необходимо учитывать совместимость пакетов и версий:

npm install jest jest-environment-puppeteer

При этом создается отдельная среда jest-environment-puppeteer, которая автоматически запускает браузер и предоставляет глобальные объекты page и browser.

Организация зависимостей в проекте

Для больших проектов рекомендуется структурировать зависимости следующим образом:

  1. Основные зависимости: Puppeteer и браузерные пакеты.
  2. Тестовые фреймворки: Jest, Mocha, Chai.
  3. Утилиты и вспомогательные библиотеки: например, dotenv для работы с конфигурацией, fs-extra для файловых операций.

Пример структуры package.json:

{
  "dependencies": {
    "puppeteer": "21.3.0",
    "dotenv": "^16.0.0"
  },
  "devDependencies": {
    "jest": "^29.5.0",
    "jest-environment-puppeteer": "^8.0.0"
  }
}

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

TypeScript требует наличия типов. Для Puppeteer типы встроены, но иногда нужны дополнительные:

npm install --save-dev @types/jest

Файл конфигурации tsconfig.json должен включать:

{
  "compilerOptions": {
    "strict": true,
    "esModuleInterop": true,
    "moduleResolution": "node",
    "target": "ES2020"
  }
}

Для корректной интеграции тестов с Puppeteer необходимо указать соответствующую среду:

"jest": {
  "preset": "jest-puppeteer"
}

Управление версиями Chromium и Node.js

Тесты Puppeteer чувствительны к версии браузера и Node.js. Рекомендуется фиксировать версии через engines в package.json:

"engines": {
  "node": ">=18.0.0 <20.0.0"
}

Использование nvm или аналогов позволяет легко переключать версии Node.js и поддерживать консистентное окружение на всех машинах.

Оптимизация установки зависимостей

Для ускорения установки и уменьшения веса проекта можно использовать puppeteer-core, который не включает Chromium по умолчанию:

npm install puppeteer-core

В этом случае необходимо указывать путь к браузеру:

const browser = await puppeteer.launch({
  executablePath: process.env.CHROME_PATH
});

Подход позволяет интегрироваться с CI/CD системами и управлять кэшированием браузеров.

Вывод

Корректное управление зависимостями в проектах с Puppeteer обеспечивает стабильность тестов, упрощает настройку CI/CD и облегчает масштабирование проектов. Ключевые практики включают фиксацию версий, разделение production и dev зависимостей, использование puppeteer-core для оптимизации и интеграцию с тестовыми фреймворками через специальные среды.