Под инициализацией в контексте timeago.js понимается подготовка библиотеки к работе: правильный импорт, настройка локалей, привязка к DOM-элементам или встраивание в компонентную структуру приложения. В отличие от многих библиотек, timeago.js не требует глобальной инициализации через конструктор или фабрику — её функции можно использовать напрямую после импорта.
import { format, render, cancel, register } from 'timeago.js';
Функции доступны сразу. Никаких вызовов init() или
new Timeago() не требуется.
const { format, render, cancel, register } = require('timeago.js');
import * as timeago from 'timeago.js';
timeago.format(Date.now() - 60000);
Этот вариант удобен, когда требуется явное указание пространства имён в коде.
Если приложение работает с определённым языком, рекомендуется
зарегистрировать нужную локаль при старте приложения — до первого
использования функции format.
Регистрация встроенной локали:
import { register } from 'timeago.js';
import ru from 'timeago.js/esm/lang/ru';
register('ru', ru);
После этого 'ru' доступна во всём приложении.
<script type="module">
import { render } from './node_modules/timeago.js/esm/index.js';
document.addEventListener('DOMContentLoaded', () => {
const nodes = document.querySelectorAll('[data-timeago]');
render(nodes, 'ru');
});
</script>
Ключевой момент — дожидаться события DOMContentLoaded,
иначе элементы могут быть ещё не доступны в момент вызова
render.
Для SPA-приложений (React, Vue, Angular) локали и глобальные настройки выносят в отдельный файл инициализации.
src/lib/timeago.ts:
import { register } from 'timeago.js';
import ru from 'timeago.js/esm/lang/ru';
register('ru', ru);
export const DEFAULT_LOCALE = 'ru';
src/main.ts:
import './lib/timeago';
Такой подход гарантирует однократную регистрацию и централизованное управление локалями.
В некоторых случаях удобно инициализировать библиотеку только при первом использовании:
let initialized = false;
function ensureTimeagoReady() {
if (!initialized) {
register('ru', ruLocale);
initialized = true;
}
}
function formatDate(date) {
ensureTimeagoReady();
return format(date, 'ru');
}
// src/index.tsx
import React from 'react';
import ReactDOM from 'react-dom/client';
import { register } from 'timeago.js';
import ru from 'timeago.js/esm/lang/ru';
import App from './App';
register('ru', ru);
ReactDOM.createRoot(document.getElementById('root')!).render(
<React.StrictMode>
<App />
</React.StrictMode>
);
Регистрация локали выполняется один раз при старте приложения, до монтирования компонентов.
// src/main.ts
import { createApp } from 'vue';
import App from './App.vue';
import { register } from 'timeago.js';
import ru from 'timeago.js/esm/lang/ru';
register('ru', ru);
createApp(App).mount('#app');
// app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { register } from 'timeago.js';
import ru from 'timeago.js/esm/lang/ru';
register('ru', ru);
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule],
bootstrap: [AppComponent]
})
export class AppModule {}
Если format вызывается раньше register,
локаль не будет применена:
// Неправильно
format(Date.now() - 60000, 'ru'); // вернёт английский текст или ошибку
register('ru', ru); // слишком поздно
// Правильно
register('ru', ru);
format(Date.now() - 60000, 'ru'); // корректно вернёт русский текст
При подключении через <script> глобальный объект
timeago становится доступен сразу:
<script src="https://unpkg.com/timeago.js"></script>
<script>
// библиотека доступна через window.timeago
console.log(timeago.format(new Date()));
</script>
Никакой инициализации не требуется — библиотека автоматически регистрирует себя в глобальном пространстве имён.
При первом импорте timeago.js:
format,
render, cancel, register.'en_US').render.Это делает подключение безопасным и предсказуемым — библиотека не производит побочных эффектов при загрузке.