Skip to content

Commit

Permalink
Update server, update Hapi Webpack plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
Belar committed Dec 16, 2017
1 parent 58a6a49 commit 6a98e46
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 76 deletions.
78 changes: 35 additions & 43 deletions template/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,44 +2,38 @@

const Hapi = require('hapi');
const Inert = require('inert');
const path = require('path');

const server = new Hapi.Server();
server.connection({
const server = new Hapi.Server({
port: 3000
});

// Register webpack HMR, fallback to development environment
if (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test') {

const WebpackConfig = require('./config/webpack.config.js'); // Webpack config
const HapiWebpackMiddleware = require('./server/plugins/HapiWebpackMiddleware');

server.register({
register: HapiWebpackMiddleware,
options: {
config: WebpackConfig,
devOptions: {
noInfo: true,
publicPath: WebpackConfig.output.publicPath,
stats: {
colors: true
}
async function initWebpackTools (middleware, config) {
await server.register({
plugin: middleware,
options: {
config: config,
devOptions: {
noInfo: true,
publicPath: config.output.publicPath,
stats: {
colors: true
}
}
}, function (err) {
if (err) {
throw err;
}
});

}

server.register([Inert], function (err) {
}
});
}

if (err) {
throw err;
}
// Register webpack HMR, fallback to development environment
if (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test') {
const WebpackConfig = require('./config/webpack.config.js'); // Webpack config
const HapiWebpackMiddleware = require('./server/plugins/HapiWebpackMiddleware');
initWebpackTools(HapiWebpackMiddleware, WebpackConfig);
}

server.register({
plugin: Inert
}).then(() => {
server.route({
method: 'GET',
path: '/assets/{filepath*}',
Expand All @@ -52,7 +46,7 @@ server.register([Inert], function (err) {
},
handler: {
directory: {
path: __dirname + '/public/assets/',
path: path.join(__dirname, '/public/assets/'),
listing: false,
index: false
}
Expand All @@ -71,7 +65,7 @@ server.register([Inert], function (err) {
},
handler: {
directory: {
path: __dirname + '/public/build/',
path: path.join(__dirname, '/public/build/'),
listing: false,
index: false
}
Expand All @@ -82,28 +76,26 @@ server.register([Inert], function (err) {
server.route({
method: 'GET',
path: '/api/call',
handler: function (request, reply) {
reply({
handler: function (request, h) {
return {
message: 'Hello!'
})
};
}
});

server.route({
method: 'GET',
path: '/{path*}',
handler: function (request, reply) {
reply.file('./public/index.html');
handler: {
file: './public/index.html'
}
});
});

server.start((err) => {
server.start();
});

if (err) {
throw err;
}
console.log('Server running at:', server.info.uri);
server.events.on('start', (route) => {
console.log('Server started');
});

module.exports = server;
75 changes: 42 additions & 33 deletions template/server/plugins/HapiWebpackMiddleware/index.js
Original file line number Diff line number Diff line change
@@ -1,39 +1,48 @@
'use strict'
'use strict';

const Webpack = require('webpack')
const WebpackDevMiddleware = require('webpack-dev-middleware')
const WebpackHotMiddleware = require('webpack-hot-middleware')
const Webpack = require('webpack');
const WebpackDevMiddleware = require('webpack-dev-middleware');
const WebpackHotMiddleware = require('webpack-hot-middleware');

exports.register = function (server, options, next) {
const webpackCompiler = Webpack(options.config)
const devMiddleware = WebpackDevMiddleware(webpackCompiler, options.devOptions)
const hotMiddleware = WebpackHotMiddleware(webpackCompiler, options.hotOptions)
const register = function (server, options, next) {
const webpackCompiler = Webpack(options.config);
const devMiddleware = WebpackDevMiddleware(webpackCompiler, options.devOptions);
const hotMiddleware = WebpackHotMiddleware(webpackCompiler, options.hotOptions);

server.ext('onRequest', (request, reply) => {
const rawRequest = request.raw.req
const rawResponse = request.raw.res
devMiddleware(rawRequest, rawResponse, (error) => {
if (error) {
return reply(error)
}
return reply.continue()
})
})
server.ext({
type: 'onRequest',
method: (request, h) => {
return new Promise((resolve, reject) => {
const rawRequest = request.raw.req;
const rawResponse = request.raw.res;
devMiddleware(rawRequest, rawResponse, (error) => {
if (error) {
return reject(error);
}
return resolve(h.continue);
});
});
}
});

server.ext('onRequest', (request, reply) => {
const rawRequest = request.raw.req
const rawResponse = request.raw.res
hotMiddleware(rawRequest, rawResponse, (error) => {
if (error) {
return reply(error)
}
return reply.continue()
})
})
server.ext({
type: 'onRequest',
method: (request, h) => {
return new Promise((resolve, reject) => {
const rawRequest = request.raw.req;
const rawResponse = request.raw.res;
hotMiddleware(rawRequest, rawResponse, (error) => {
if (error) {
return reject(error);
}
return resolve(h.continue);
});
});
}
});
};

next()
}

exports.register.attributes = {
exports.plugin = {
register: register,
pkg: require('./package.json')
}
};

0 comments on commit 6a98e46

Please sign in to comment.