Использование CommonJS-модулей для интеграции библиотеки localForage характерно для проектов, построенных на Node.js-инструментах сборки, таких как Webpack, Browserify или Parcel. Несмотря на то что localForage предназначена для работы в браузере и опирается на Web APIs (IndexedDB, WebSQL, localStorage), её корректное подключение через CommonJS остаётся стандартным сценарием в современных фронтенд-пайплайнах.
В проектах, где используется система модулей CommonJS, подключение
библиотеки осуществляется через require:
const localForage = require('localforage');
После этого объект localForage становится доступным как
единый интерфейс для работы с асинхронным хранилищем данных в
браузере.
Важно учитывать, что CommonJS-импорт не меняет внутреннюю природу библиотеки: все операции остаются асинхронными и выполняются через Promise API.
Перед использованием CommonJS-импорта библиотека должна быть установлена через npm или yarn:
npm install localforage
или
yarn add localforage
После установки пакет попадает в node_modules, откуда и
резолвится через require.
Webpack корректно обрабатывает CommonJS-модули и преобразует их в
формат, пригодный для браузера. При подключении localForage через
require происходит следующее:
Пример использования в Webpack-проекте:
const localForage = require('localforage');
localForage.setItem('token', 'abc123')
.then(() => console.log('Сохранено'));
Browserify исторически ориентирован на CommonJS, поэтому localForage подключается без дополнительных настроек:
var localForage = require('localforage');
localForage.getItem('token').then(function (value) {
console.log(value);
});
Parcel автоматически определяет модульную систему и также поддерживает CommonJS без дополнительной конфигурации:
const localForage = require('localforage');
localForage распространяется как пакет, совместимый одновременно с CommonJS и ES Modules. Это означает, что:
require('localforage') работает без дополнительных
транспиляций;import localForage from 'localforage' является
альтернативным синтаксисом;В средах сборки часто происходит интероп между форматами модулей, обеспечиваемый транспайлерами (Babel, TypeScript).
После подключения через CommonJS доступен полный API библиотеки:
const localForage = require('localforage');
localForage.setItem('user', { id: 1, name: 'Alex' });
localForage.getItem('user').then((value) => {
console.log(value);
});
Методы возвращают Promise, что делает возможным построение цепочек обработки данных:
localForage.setItem('settings', { theme: 'dark' })
.then(() => localForage.getItem('settings'))
.then((value) => {
console.log(value.theme);
});
CommonJS-подключение не влияет на возможность конфигурирования библиотеки. Настройки применяются сразу после импорта:
const localForage = require('localforage');
localForage.config({
name: 'myApp',
storeName: 'keyValueStore',
driver: localForage.INDEXEDDB
});
Параметры конфигурации:
После подключения через require доступен полный контроль
над драйверами:
const localForage = require('localforage');
localForage.setDriver([
localForage.INDEXEDDB,
localForage.WEBSQL,
localForage.LOCALSTORAGE
]);
Механизм выбора драйвера остаётся идентичным вне зависимости от системы модулей.
Несмотря на возможность импорта через CommonJS, localForage не предназначен для прямого выполнения в Node.js, поскольку зависит от браузерных API.
При использовании SSR (например, Next.js или Nuxt в режиме серверного рендеринга) требуется учитывать:
window и IndexedDB отсутствуют на сервере;require допустим, но обращение к API —
условное.Пример безопасного использования:
let localForage;
if (typeof window !== 'undefined') {
localForage = require('localforage');
}
В некоторых архитектурах применяется динамическая загрузка:
function getStorage() {
return require('localforage');
}
const storage = getStorage();
storage.setItem('cache', 'data');
Такой подход снижает вероятность выполнения кода на сервере и позволяет управлять контекстом загрузки.
const localForage = require('localforage');
localForage.setItem('key', 'value');
Ошибка возникает только в окружениях, где IndexedDB недоступен до полной инициализации браузера.
При неправильной настройке Babel или Webpack возможны ситуации:
localForage.default is undefined;Решается настройкой esModuleInterop или корректным
импортом:
const localForage = require('localforage').default || require('localforage');
Отсутствие Web APIs приводит к ошибкам выполнения, поскольку localForage не содержит серверной реализации хранилища.
В современных фронтенд-приложениях CommonJS часто выступает промежуточным слоем:
Такой подход обеспечивает совместимость с legacy-кодом и старыми инструментами сборки.
Экспорт localForage представляет собой единый объект, содержащий:
При импорте через require отсутствует необходимость
деструктуризации:
const localForage = require('localforage');
localForage.clear();
Однако при желании возможно точечное извлечение:
const { setItem, getItem } = require('localforage');
Такой вариант используется реже, поскольку нарушает единообразие API-объекта.
CommonJS-использование localForage строится на трёх базовых шагах:
require;Эта модель остаётся стабильной независимо от сборщика и масштаба приложения, сохраняя совместимость с современными и устаревшими фронтенд-архитектурами.