Использование полимерной службы с локальным сервером API

Я хочу использовать polymer serve для обслуживания моего приложения LitElement во время разработки, не дожидаясь завершения polymer build после каждого изменения. Однако приложение использует относительные URL-адреса для доступа к API, например GET /api/api_method, и AFAIK я не могу заставить polymer serve и мой сервер работать на одном порте (например, localhost:8080).

В настоящее время я запускаю polymer build, а затем запускаю свой локальный сервер Python, который обслуживает файлы Polymer как статические.

Идеальный сценарий:

$ run_my_server.sh --port=8081
$ polymer serve --api_server="localhost:8081"

Затем для маршрутов, которые находятся в каталоге сборки полимера, они будут обслуживаться, в противном случае запрос будет перенаправлен на localhost:8081.

Есть ли другие способы настроить локальный процесс разработки без перестройки всего приложения после каждого изменения?


person EvilTosha    schedule 12.08.2019    source источник
comment
Вам обязательно нужно вызывать API с относительными URL-адресами? Разве вы не можете использовать абсолютный базовый URL?   -  person Umbo    schedule 17.08.2019
comment
@Umbo Это может привести к ошибкам - представьте, что вы забыли вернуть его с localhost перед развертыванием.   -  person EvilTosha    schedule 19.08.2019


Ответы (1)


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

Итак, у вас есть 2 варианта:

  1. в основном то, что вы делаете, например упаковка полимером служить и пересылать запросы
  2. использовать другой сервер, поддерживающий промежуточное ПО прокси

Например, файл es-dev-server.

установить

npm i -D es-dev-server koa-proxies

создать es-dev-server.config.js

const proxy = require('koa-proxies');

module.exports = {
  port: 9000,
  middlewares: [
    proxy('/api', {
      target: 'http://localhost:8081',
    })
  ],
};

начать с

es-dev-server --node-resolve

Теперь, если вы нажмете http://localhost:9000, вас будет обслуживать es-dev-сервер. Однако, если вы нажмете http://localhost:9000/api, тогда он будет фактически обслуживаться с вашего сервера api.

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

Более подробную информацию можно найти здесь: https://open-wc.org/developing/es-dev-server.html#custom-middlewares-proxy

PS: Я со-сопровождающий

person daKmoR    schedule 18.08.2019
comment
Но это не решает основную проблему (горячая перезагрузка), не так ли? Меня устраивает polymer build рабочий процесс, но чтобы увидеть изменения в браузере, требуется до двух минут. - person EvilTosha; 19.08.2019
comment
es-dev-server отправляет отдельные файлы как есть (только с замененным импортом голых модулей) - объединение этого со стандартным кешем браузера и заголовками кеша позволяет выполнять быструю (автоматическую) перезагрузку ... попробуйте, и если это недостаточно быстро, позвольте нам знаю с репродукцией, чтобы мы могли посмотреть :) - person daKmoR; 20.08.2019
comment
Я думаю, что es-dev-server сломан; мой index.html не загружается должным образом. Независимо от того, какую комбинацию я пробую, приложение полимера не загружается. - person reaper_unique; 18.06.2020
comment
если вы думаете, что что-то сломалось, лучше открыть проблему и объяснить, как это воспроизвести - person daKmoR; 19.06.2020