1

我正在使用 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'));   <-----------
  }
};

必须有更好的方法来解决这个问题。如何做到这一点,以便每次重建客户端代码时都不必手动修改服务器代码?

4

1 回答 1

0

所以这是我的解决方案,我不知道它是否被认为是处理这个问题的最佳实践,但它有效,我需要继续做更重要的事情。

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然后我继续提供与请求的路径匹配的文件。

于 2019-01-03T18:07:52.420 回答