Как обслуживать JS-файл в комплекте с хэшированным именем на сервере Node? - PullRequest
0 голосов
/ 03 января 2019

Я использую Parcel для связывания своего клиентского кода, и каждый раз, когда я запускаю производственную сборку, он связывает код javascript в файл с хэшированной частью. Пример: webrtc.27c30b71.js.

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

const handleRequest = (request: IncomingMessage, response: ServerResponse) => {
  // Render the single client html file for any request the HTTP server receives
  console.log('request received: ' + request.url);

  if(request.url === '/') {
    response.writeHead(200, {'Content-Type': 'text/html'});
    response.end(fs.readFileSync('dist/index.html'));
  } else if(request.url === '/webrtc.27c30b71.js')) {   <----------
    response.writeHead(200, {'Content-Type': 'application/javascript'});
    response.end(fs.readFileSync('dist/webrtc.27c30b71.js'));   <-----------
  }
};

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

1 Ответ

0 голосов
/ 03 января 2019

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

const handleRequest = (request: IncomingMessage, response: ServerResponse) => {
  // Render the single client html file for any request the HTTP server receives
  console.log('request received: ' + request.url);

  if(request.url === '/') {
    response.writeHead(200, {'Content-Type': 'text/html'});
    response.end(fs.readFileSync('dist/index.html'));
  } else if(/(\/)(webrtc)(\.).*?(\.)(js)/.test(request.url as string)) { <----------
    response.writeHead(200, {'Content-Type': 'application/javascript'});
    response.end(fs.readFileSync(`dist${request.url}`));                 <---------
  }
};

Я использовалтест на регулярное выражение для любого запроса, где путь соответствует /webrtc.[hash].js, а затем я продолжаю обслуживать файл, который соответствует запрошенному пути.

...