0.7.7 • Published 3 months ago

@tinkoff/module-loader-server v0.7.7

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
3 months ago

module-loader-server

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

Установка

Для yarn:

yarn add @tinkoff/module-loader-server

Для npm:

npm install @tinkoff/module-loader-server

Подключение и использование

import { ServerLoader } from '@tinkoff/module-loader-server';

const loader = new ServerLoader();

loader.resolveByUrl('https://cdn.example.com/js/module.js').then((moduleExports) => {
  // ...
});

В конструктор можно передать опции (см. интерфейс LoaderDeps), из важных это параметр request который по умлочанию определяется библиотекой request, и содержит только deduplicate плагин.

Если вам нужны другие плагины или поведение при запросе на сервер, переопределите параметр request в конструкторе лоадера.

Взаимодействие с кешем

Допустим вам нужно сихронное апи для получения объекта, при условии что он есть в кэше. Тогда есть два способа.

Первый, используем метод loadByUrl<R>(url: string, options: LoadOptions), который возвращает Promise<R> если объекта нет в кеше, и R если он там есть:

const result = loader.loadByUrl(url);
if (!isPromise(result)) {
  syncOperation(result);
} else {
  asyncOperation(result);
}

Второй, можно использовать метод getByUrl<R = any>(url: string, options: LoadOptions = {}): R | void, который возвращает объект, только если он присутствует в кеше:

const result = loader.getByUrl(url);
if (result !== void 0) {
  syncOperation(result);
} else {
  asyncOperation(loader.resolveByUrl(url));
}

Особенности

  • Circuit Breaker для запросов. На каждый урл будет создан отдельный Circuit Breaker, который будет отслеживать падения именно этого JS файла. Это нужно для быстрой отдачи ошибки вместо завершения запроса по таймаутам, что может ухудшить общее время ответа приложения.

Интерфейс и типы

@inline src/types.h.ts

0.8.6

3 months ago

0.8.5

4 months ago

0.7.7

4 months ago

0.8.4

6 months ago

0.7.6

7 months ago

0.6.6

7 months ago

0.8.3

7 months ago

0.7.5

8 months ago

0.8.2

8 months ago

0.7.2

12 months ago

0.6.5

10 months ago

0.7.3

10 months ago

0.6.4

12 months ago

0.7.1

1 year ago

0.6.3

1 year ago

0.6.2

1 year ago

0.6.1

2 years ago

0.6.0

2 years ago

0.5.12

2 years ago

0.5.11

2 years ago

0.5.10

2 years ago

0.5.8

2 years ago

0.5.9

2 years ago

0.5.7

2 years ago

0.5.6

2 years ago

0.5.4

3 years ago

0.5.5

3 years ago

0.5.3

3 years ago

0.5.2

3 years ago

0.4.46

3 years ago

0.4.45

3 years ago

0.4.42

3 years ago

0.4.43

3 years ago

0.4.44

3 years ago

0.4.41

3 years ago

0.4.40

3 years ago