Установка и подключение библиотеки

Библиотека bcrypt.js представляет собой реализацию алгоритма хеширования bcrypt на чистом JavaScript без нативных зависимостей. Это делает её удобной для использования как в среде Node.js, так и в браузере.

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

Основной способ подключения — через менеджер пакетов npm. Установка выполняется командой:

npm install bcryptjs

После выполнения команды библиотека будет добавлена в директорию node_modules, а также автоматически прописана в секции dependencies файла package.json.

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

При использовании менеджера пакетов yarn команда установки выглядит следующим образом:

yarn add bcryptjs

Результат аналогичен npm: библиотека становится доступной в проекте и фиксируется в конфигурации зависимостей.


Подключение библиотеки в проекте

После установки необходимо корректно импортировать библиотеку в коде.

Использование в CommonJS (Node.js)

В классическом окружении Node.js используется синтаксис require:

const bcrypt = require('bcryptjs');

Переменная bcrypt теперь содержит весь API библиотеки, включая методы для генерации соли и хеширования.

Использование в ES Modules

При использовании современного синтаксиса модулей (ESM) подключение выполняется через import:

import bcrypt from 'bcryptjs';

Важно учитывать, что для корректной работы ESM в Node.js необходимо либо указать "type": "module" в package.json, либо использовать расширение .mjs.


Подключение в браузере

bcrypt.js может использоваться без сборщиков напрямую в браузере.

Через CDN

Библиотека доступна через CDN-сервисы. Подключение осуществляется добавлением скрипта:

<script src="https://cdn.jsdelivr.net/npm/bcryptjs/dist/bcrypt.min.js"></script>

После загрузки объект dcodeIO.bcrypt становится доступным в глобальной области:

const bcrypt = dcodeIO.bcrypt;

Особенности использования в браузере

  • Отсутствие нативных зависимостей делает библиотеку полностью совместимой с браузером
  • Производительность ниже, чем у нативной реализации bcrypt в Node.js
  • Подходит для клиентских задач, но чувствительные операции чаще выполняются на сервере

Проверка корректности установки

После подключения рекомендуется убедиться, что библиотека работает корректно. Минимальная проверка:

const bcrypt = require('bcryptjs');

const hash = bcrypt.hashSync('password', 10);
console.log(hash);

Если в консоли выводится строка, начинающаяся с $2a$ или $2b$, библиотека установлена и функционирует правильно.


Структура библиотеки после подключения

Объект bcrypt предоставляет набор ключевых методов:

  • hashSync — синхронное хеширование
  • hash — асинхронное хеширование
  • compareSync — синхронное сравнение
  • compare — асинхронное сравнение
  • genSaltSync — генерация соли (синхронно)
  • genSalt — генерация соли (асинхронно)

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

console.log(Object.keys(bcrypt));

Отличие bcrypt.js от bcrypt

Существует также библиотека bcrypt, которая использует нативные расширения (C++ bindings). В отличие от неё:

  • bcrypt.js не требует компиляции
  • проще устанавливается в любой среде
  • работает в браузере
  • уступает в производительности

Выбор зависит от требований проекта: для серверных приложений с высокой нагрузкой чаще выбирается нативный bcrypt, для универсальности — bcrypt.js.


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

Конфликт модулей (CommonJS vs ESM)

Ошибки вида:

Error: require is not defined

возникают при неправильной конфигурации модулей. Решение — привести стиль импорта в соответствие с настройками проекта.

Отсутствие модуля

Ошибка:

Cannot find module 'bcryptjs'

указывает на отсутствие установленной зависимости. Требуется повторная установка:

npm install bcryptjs

Проблемы с CDN

Если библиотека не загружается в браузере:

  • проверить доступность CDN
  • убедиться в корректности URL
  • проверить порядок подключения скриптов

Рекомендации по подключению

  • В серверных проектах подключение выполнять один раз на уровне модуля
  • Не дублировать импорт в каждом файле без необходимости
  • В браузере минимизировать использование тяжелых криптографических операций
  • Использовать сборщики (Webpack, Vite) для оптимизации бандла при фронтенд-разработке

Минимальный рабочий пример

import bcrypt from 'bcryptjs';

async function run() {
    const password = 'mySecret';
    const saltRounds = 10;

    const hash = await bcrypt.hash(password, saltRounds);
    const isMatch = await bcrypt.compare(password, hash);

    console.log({ hash, isMatch });
}

run();

Этот пример демонстрирует корректное подключение и базовое использование библиотеки после установки.