Guest User

Untitled

a guest
Apr 21st, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.68 KB | None | 0 0
  1. import path from 'path'
  2. import assert from 'assert'
  3. import webpack, { MultiCompiler, HotModuleReplacementPlugin } from 'webpack'
  4. import webpackDevMiddleware from 'webpack-dev-middleware'
  5. import webpackHotMiddleware from 'webpack-hot-middleware'
  6.  
  7. async function wrapMiddleware(middleware, request) {
  8. const { req, res } = request.raw
  9. await new Promise((resolve, reject) => {
  10. middleware(req, res, (error) => {
  11. if (error) {
  12. reject(error)
  13. } else {
  14. resolve()
  15. }
  16. })
  17. })
  18. }
  19.  
  20. function checkHMRPlugin(compiler) {
  21. const hasHMRPlugin = (c) =>
  22. (c.plugins || []).some((p) => p instanceof HotModuleReplacementPlugin)
  23. const compilers =
  24. compiler instanceof MultiCompiler ? compiler.compilers : [compiler]
  25. const ok = compilers.every((c) => hasHMRPlugin(c.options || {}))
  26. assert(ok, 'HMR plugin need to be added in webpack config file')
  27. }
  28.  
  29. export default {
  30. name: 'hapiWebpack',
  31. version: '0.0.1',
  32. dependencies: 'inert',
  33. register: async (server, options) => {
  34. if (options.isDev) {
  35. const compiler = webpack(options.webpackConfig)
  36.  
  37. checkHMRPlugin(compiler)
  38.  
  39. const devMiddleware = webpackDevMiddleware(compiler, { logLevel: 'warn' })
  40. const hotMiddleware = webpackHotMiddleware(compiler)
  41.  
  42. server.ext('onRequest', async (request, h) => {
  43. await wrapMiddleware(devMiddleware, request)
  44. await wrapMiddleware(hotMiddleware, request)
  45. return h.continue
  46. })
  47. server.expose({ compiler })
  48. } else {
  49. server.route({
  50. method: 'GET',
  51. path: '/static/{file*}',
  52. handler: {
  53. directory: {
  54. path: path.resolve(__dirname, '../static')
  55. }
  56. }
  57. })
  58. }
  59. }
  60. }
Add Comment
Please, Sign In to add comment