@tinkoff/module-loader-server v0.7.7
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
3 months ago
4 months ago
4 months ago
6 months ago
7 months ago
7 months ago
7 months ago
8 months ago
8 months ago
12 months ago
10 months ago
10 months ago
12 months ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago