diff --git a/package-lock.json b/package-lock.json index def592ca9..85a602932 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3413,6 +3413,14 @@ } } }, + "express-static-gzip": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/express-static-gzip/-/express-static-gzip-2.1.0.tgz", + "integrity": "sha512-XGozfjgsfVKBc8lQmPco9zd1+sK9Wy1ZPEAYtH8E34FbBr5BFp2HV+V1PpmIYHaWg8+ecLl/JnQkREbtPSJyxQ==", + "requires": { + "serve-static": "^1.14.1" + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", diff --git a/package.json b/package.json index 58307d362..eecfdc3e3 100644 --- a/package.json +++ b/package.json @@ -49,6 +49,7 @@ "cookie-parser": "^1.4.5", "create-react-class": "^15.6.3", "express": "^4.17.1", + "express-static-gzip": "2.1.0", "fs-extra": "9.0.1", "googleapis": "59.0.0", "jwt-simple": "^0.5.6", 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..c54586d7b 100644 --- a/server.js +++ b/server.js @@ -1,12 +1,19 @@ const _ = require('lodash'); const jwt = require('jwt-simple'); +const expressStaticGzip = require('express-static-gzip'); const express = require('express'); const app = express(); const homebrewApi = require('./server/homebrew.api.js'); const GoogleActions = require('./server/googleActions.js'); -app.use(express.static(`${__dirname}/build`)); +// Serve brotli-compressed static files if available +app.use('/', expressStaticGzip(`${__dirname}/build`, { + enableBrotli : true, + orderPreference : ['br'] +})); + +//app.use(express.static(`${__dirname}/build`)); app.use(require('body-parser').json({ limit: '25mb' })); app.use(require('cookie-parser')()); app.use(require('./server/forcessl.mw.js')); @@ -44,14 +51,9 @@ app.use((req, res, next)=>{ return next(); }); - app.use(homebrewApi); - app.use(require('./server/admin.api.js')); -//app.use('/user',require('./server/user.routes.js')); - - const HomebrewModel = require('./server/homebrew.model.js').model; const welcomeText = require('fs').readFileSync('./client/homebrew/pages/homePage/welcome_msg.md', 'utf8'); const changelogText = require('fs').readFileSync('./changelog.md', 'utf8'); @@ -200,11 +202,6 @@ app.get('/print/:id', (req, res, next)=>{ } }); -app.get('/source/:id', (req, res)=>{ - -}); - - //Render the page //const render = require('.build/render'); const templateFn = require('./client/template.js');