diff --git a/scripts/buildHomebrew.js b/scripts/buildHomebrew.js index d4cb5dd39..76ad07d32 100644 --- a/scripts/buildHomebrew.js +++ b/scripts/buildHomebrew.js @@ -1,4 +1,5 @@ const fs = require('fs-extra'); +const zlib = require('zlib'); const Proj = require('./project.json'); const { pack, watchFile, livereload } = require('vitreum'); @@ -14,10 +15,16 @@ const transforms = { }; const build = async ({ bundle, render, ssr })=>{ - await fs.outputFile('./build/homebrew/bundle.css', await lessTransform.generate({ paths: './shared' })); + const css = await lessTransform.generate({ paths: './shared' }); + await fs.outputFile('./build/homebrew/bundle.css', css); await fs.outputFile('./build/homebrew/bundle.js', bundle); await fs.outputFile('./build/homebrew/ssr.js', ssr); await fs.outputFile('./build/homebrew/render.js', render); + + //compress files + await fs.outputFile('./build/homebrew/bundle.css.br', zlib.brotliCompressSync(css)); + await fs.outputFile('./build/homebrew/bundle.js.br', zlib.brotliCompressSync(bundle)); + await fs.outputFile('./build/homebrew/ssr.js.br', zlib.brotliCompressSync(ssr)); }; fs.emptyDirSync('./build/homebrew'); diff --git a/server.js b/server.js index d0c77528f..31fda08fb 100644 --- a/server.js +++ b/server.js @@ -1,11 +1,30 @@ const _ = require('lodash'); const jwt = require('jwt-simple'); +const fs = require('fs-extra'); const express = require('express'); const app = express(); const homebrewApi = require('./server/homebrew.api.js'); const GoogleActions = require('./server/googleActions.js'); +// Serve brotli-compressed static files if available +app.get('*.js', function(req, res, next) { + if(fs.existsSync('build' + req.url + '.br')){ + req.url = req.url + '.br'; + res.set('Content-Encoding', 'br'); + res.set('Content-Type', 'text/javascript'); + } + next(); +}); +app.get('*.css', function(req, res, next) { + if(fs.existsSync('build' + req.url + '.br')){ + req.url = req.url + '.br'; + res.set('Content-Encoding', 'br'); + res.set('Content-Type', 'text/javascript'); + } + next(); +}); + app.use(express.static(`${__dirname}/build`)); app.use(require('body-parser').json({ limit: '25mb' })); app.use(require('cookie-parser')());