Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

webpack-dev-middleware does not compile output into folder

I'm using webpack-dev-middleware in my server to compile javascript like this:

if (development){                                                          
  app.use(webpackMiddleware(webpack({                                      
     // webpack options                                                   
     // webpackMiddleware takes a Compiler object as first parameter      
     // which is returned by webpack(...) without callback.               
    entry: {                                                               
      dashboard: path.join(__dirname, 'scripts/dashboard.jsx'),            
      tasks: path.join(__dirname, 'scripts/tasks.jsx')                     
    },                                                                     
       output: {                                                            
          path: __dirname + 'dist',                                        
          filename: '[name].bundle.js',                                    
          // no real path is required, just pass "/"                       
          // but it will work with other paths too.                        
      },                                                                   
      resolve: {                                                           
        extensions: ['', '.js', '.jsx']                                    
      },                                                                   
      module: {                                                            
        loaders: [                                                         
           { test: /\.jsx$/, loader: "jsx" }                            
      ]                                                                  
      }                                                                    
  }                                                                        
  ),                                                                       
  {                                                                        
    stats: {                                                               
     colors: true                                                         
    }                                                                      
  }));                                                                     
} 

Everything works fine in development, I can include the bundles in my views. But in production I cannot include them, because they are not build into 'dist'. This folder is always empty. What do I do wrong? Does somebody has an idea?

Best Regards Jan

like image 623
J Maushagen Avatar asked Sep 13 '25 21:09

J Maushagen


2 Answers

webpack-dev-middleware doesn't output any file. If you want to output real files, you need to use the webpack command outside of express. You can put your webpack config into a seperate file, and refer to that with both your webpack command and require it in your express script to access it.

like image 96
Jeff Ling Avatar answered Sep 16 '25 12:09

Jeff Ling


if you want to use the in-memory bundle, you can use the streamed file like this:

var express = require('express');
var app = express();
var webpack = require('webpack');
var path = require('path');

var compiler = webpack(require('./webpack.config.js'));

app.use(require('webpack-dev-middleware')(compiler, {
  noInfo: true,
  publicPath: '/'
}));

app.use('*', function (req, res, next) {
  var filename = path.join(compiler.outputPath,'index.html');
  compiler.outputFileSystem.readFile(filename, function(err, result){
    if (err) {
      return next(err);
    }
    res.set('content-type','text/html');
    res.send(result);
    res.end();
  });
});

app.listen(3000);
like image 35
Kornelius Avatar answered Sep 16 '25 11:09

Kornelius