Last active
March 9, 2023 17:30
-
-
Save jaredatron/d133efb81148f4b50157b3e0321c759b to your computer and use it in GitHub Desktop.
putting parcel server behind development server because parcel's proxy features are inflexible
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Path from 'path' | |
import express from 'express' | |
import Router from 'express-promise-router' | |
import { createProxyMiddleware } from 'http-proxy-middleware' | |
import env from '../env.js' | |
let assetsRoutes, indexHtmlFallback | |
// proxy requests to `parcel serve` process | |
if (process.env.CLIENT_SERVER_PORT){ | |
const parcelUrl = `http://localhost:${process.env.CLIENT_SERVER_PORT}/` | |
const parcelHTTPProxy = createProxyMiddleware('/assets', { | |
target: parcelUrl, | |
changeOrigin: true, | |
}) | |
const parcelWSProxy = createProxyMiddleware({ | |
target: parcelUrl, | |
changeOrigin: true, // ? | |
pathFilter: '/socket', | |
ws: true, | |
}) | |
assetsRoutes = new Router | |
assetsRoutes.use(parcelHTTPProxy) | |
assetsRoutes.use(parcelWSProxy) | |
// assetsRoutes.on('upgrade', parcelWSProxy.upgrade) // <-- subscribe to http 'upgrade' | |
indexHtmlFallback = new Router | |
indexHtmlFallback.get('*', function (req, res, next) { | |
if (req.xhr || !req.accepts('html')) return next() | |
res.set('Cache-Control', 'no-cache') | |
req.originalUrl = req.url = '/assets/index.html' | |
parcelProxy(req, res, next) | |
}) | |
// serve static files | |
}else{ | |
assetsRoutes = express.static(env.BUILD_PATH, { | |
setHeaders(res, path, stat){ | |
console.log('GET ASSET', path) | |
// res.setHeader("Cache-Control", "public, max-age=604800, immutable") | |
res.set('Cache-Control', 'no-cache') | |
} | |
}) | |
const indexPath = Path.join(env.BUILD_PATH, 'index.html') | |
const indexHtmlFallback = new Router() | |
indexHtmlFallback.get('*', function (req, res, next) { | |
if (req.xhr || !req.accepts('html')) return next() | |
res.set('Cache-Control', 'no-cache') | |
res.sendFile(indexPath) | |
}) | |
} | |
export { assetsRoutes, indexHtmlFallback } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment