webpack-dev-server: автоматическая перезагрузка для сценария tampermonkey - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь получить webpack-dev-server автоматическую перезагрузку скрипта, который я пишу для запуска в качестве пользовательского скрипта в Tampermonkey с плагином webpack-userscript. Я подозреваю, что проблема в том, что сценарий запускается на внешнем веб-сайте, а не на локальном хосте, поэтому я не знаю, возможно ли это вообще.

Я заметил, что сценарий пытается делать запросы к https://<external website host>:8080/sockjs-node/ вместо ws://localhost:8080/sockjs-node. Я попытался использовать прокси в конфигурации dev-сервера, но он не работает, и я не уверен, что это действительно правильный подход.

devServer: {
   contentBase: path.join(__dirname, 'dist'),
   proxy: {
      '/sockjs-node': {
         target: 'ws://localhost:8080',
         secure: false,
         ws: true,
      },
   },
},

Одна вещь, которую я заметил после настройки прокси запрос изменился с https://<external website host>:8080/sockjs-node/ на https://localhost:8080/sockjs-node/, и теперь он продолжает запрашивать https://localhost:8080/sockjs-node/, даже когда я удаляю прокси.

1 Ответ

0 голосов
/ 08 мая 2020

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

Поэтому мне пришлось настроить сервер разработки для использования https, но самозаверяющий сертификат по умолчанию не т достаточно. Для этого комментария я создал root CA и сертификат для localhost с помощью mkcert (на Windows мне пришлось вручную добавить root CA в хранилище сертификатов браузера), а затем конфигурация была просто :

devServer: {
   contentBase: path.join(__dirname, 'dist'),
   disableHostCheck: true,
   https: {
      key: readFileSync(path.resolve('../../localhost-key.pem')),
      cert: readFileSync(path.resolve('../../localhost.pem')),
      ca: readFileSync(path.join(os.homedir(), 'AppData/Local/mkcert/rootCA.pem')),
   },
},
...