Регистрация и распространение

Day.js распространяется как npm-пакет и является стандартным модулем для современных JavaScript-проектов. Базовая установка выполняется через менеджеры пакетов:

npm install dayjs

или

yarn add dayjs

После установки библиотека становится доступной в проекте как обычный модуль Node.js или ESModule.

Импорт базовой версии:

import dayjs from 'dayjs';

или в CommonJS-среде:

const dayjs = require('dayjs');

Минимальный размер ядра библиотеки обеспечивает быструю загрузку и предсказуемое поведение в различных окружениях.


Структура пакета и модульность

Day.js построен по принципу модульного ядра с расширениями через плагины. Основной пакет содержит только базовую функциональность работы с датами:

  • создание объектов даты
  • форматирование
  • сравнение
  • арифметика времени
  • парсинг входных значений

Дополнительные возможности подключаются отдельно, что влияет на итоговый размер бандла.

Пример подключения плагина:

import dayjs from 'dayjs';
import relativeTime from 'dayjs/plugin/relativeTime';

dayjs.extend(relativeTime);

Такой подход позволяет контролировать состав итоговой сборки и исключать неиспользуемые функции.


Подключение через CDN

Для использования Day.js без сборщиков применяется загрузка через CDN. Это удобно для небольших проектов, прототипов и встраиваемых скриптов.

Подключение через CDN:

<script src="https://unpkg.com/dayjs"></script>

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

const now = dayjs();

При использовании CDN загружается полная сборка, включающая базовый функционал без плагинов.


Использование в браузерных сборках

В современных фронтенд-сборках Day.js интегрируется через ESModules. Наиболее распространённые инструменты:

  • Vite
  • Webpack
  • Rollup
  • Parcel

Пример импорта в проекте на Vite:

import dayjs from 'dayjs';

const formatted = dayjs().format('YYYY-MM-DD');

Tree-shaking позволяет исключать неиспользуемые части кода, что особенно важно при подключении плагинов.


Подключение локалей

Локализация в Day.js не включена в ядро по умолчанию. Поддержка языков добавляется вручную через импорт локалей.

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

import dayjs from 'dayjs';
import 'dayjs/locale/ru';

dayjs.locale('ru');

После этого все операции форматирования и вывода времени учитывают выбранную локаль.

Важно учитывать, что локали являются отдельными модулями и не входят в основной пакет, что снижает общий размер библиотеки.


Работа с плагинами в контексте распространения

Плагины Day.js распространяются как отдельные модули npm-пакета и подключаются по требованию.

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

npm install dayjs-plugin-utc

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

import dayjs from 'dayjs';
import utc from 'dayjs/plugin/utc';

dayjs.extend(utc);

const date = dayjs().utc();

Каждый плагин подключается отдельно, что делает архитектуру гибкой и позволяет формировать минимальные сборки под конкретные задачи.


Различия между сборками

Day.js может использоваться в нескольких форматах распространения:

ESM (ES Modules) Используется в современных сборщиках и поддерживает tree-shaking.

import dayjs from 'dayjs';

CommonJS Применяется в Node.js и старых сборках.

const dayjs = require('dayjs');

UMD через CDN Глобальная версия без необходимости сборки.

const d = dayjs();

Каждый формат ориентирован на разные среды выполнения и сценарии интеграции.


Минификация и размер библиотеки

Одним из ключевых факторов распространения Day.js является малый размер. Базовое ядро занимает минимальное количество места и легко минифицируется при сборке.

Особенности:

  • отсутствие избыточных зависимостей
  • модульная архитектура
  • подключение только используемых функций
  • эффективная работа с tree-shaking

При использовании плагинов размер увеличивается линейно в зависимости от количества подключённых модулей.


Поддержка Node.js окружения

Day.js полностью совместим с Node.js и может использоваться как в серверных приложениях, так и в CLI-инструментах.

Пример использования в Node.js:

const dayjs = require('dayjs');

console.log(dayjs().format('YYYY-MM-DD HH:mm:ss'));

Библиотека не требует дополнительных зависимостей и работает в любых версиях Node.js, поддерживающих CommonJS или ESModules.


Использование в TypeScript-проектах

Day.js содержит встроенные типы TypeScript, что обеспечивает корректную типизацию без дополнительных деклараций.

Пример:

import dayjs from 'dayjs';

const date: string = dayjs().format('YYYY-MM-DD');

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


Особенности распространения через bundler-оптимизацию

Современные сборщики анализируют импорт Day.js и включают только используемые части библиотеки. Это особенно эффективно при:

  • использовании отдельных плагинов
  • подключении локалей выборочно
  • исключении неиспользуемых функций форматирования

Пример оптимального импорта:

import dayjs from 'dayjs/esm';

ESM-версия позволяет добиться более агрессивного tree-shaking и уменьшения итогового размера бандла.


CDN-версии и ограничения

При подключении через CDN отсутствует возможность тонкой оптимизации. Загружается единый файл, включающий базовую функциональность.

Ограничения:

  • отсутствие tree-shaking
  • необходимость ручного добавления локалей
  • невозможность частичной загрузки плагинов

Преимущество заключается в простоте интеграции и отсутствии этапа сборки.


Совместимость и распространение в экосистеме

Day.js активно используется в:

  • React-приложениях
  • Vue-проектах
  • Node.js backend-сервисах
  • статических HTML-страницах
  • серверных рендеринговых системах

Универсальность достигается за счёт поддержки разных форматов модулей и отсутствия жёсткой привязки к платформе или окружению.