christianalfoni / webpack-express-boilerplate

A boilerplate for running a Webpack workflow in Node express
MIT License
1.4k stars 292 forks source link

Unable to load css. #78

Open Triyugi opened 7 years ago

Triyugi commented 7 years ago

When I am running code in browser, getting error: bundle.css status failed.

webpack.config.js is:

var path = require('path');
var webpack = require('webpack');
var HtmlWebpackPlugin = require('html-webpack-plugin');
const ExtractTextPlugin = require("extract-text-webpack-plugin");

module.exports = {
  devtool: 'eval-source-map',
  entry: [
    'webpack-hot-middleware/client?reload=true',
    path.join(__dirname, 'app/index.js')
  ],
  output: {
    path: path.join(__dirname, '/dist/'),
    filename: '[name].js',
    publicPath: '/'
  },
  plugins: [
    **new ExtractTextPlugin('/bundle.css', { allChunks: true }),**
    new HtmlWebpackPlugin({
      template: 'app/index.html',
      inject: 'body',
      filename: 'index.html'
    }),
    new webpack.optimize.OccurrenceOrderPlugin(),
    new webpack.HotModuleReplacementPlugin(),
    new webpack.NoErrorsPlugin(),
    new webpack.DefinePlugin({
      'process.env.NODE_ENV': JSON.stringify('production')
    })
  ],
  resolve: {
    extensions: ['', '.scss', '.css', '.js', '.json'],
    modulesDirectories: [
      'node_modules',
      path.resolve(__dirname, './node_modules')
    ]
  },
  module: {
    loaders: [{
      test: /\.jsx?$/,
      exclude: /node_modules/,
      loader: 'babel',
      query: {
        "presets": ["react", "es2015", "stage-0", "react-hmre"]
      }
    }, {
      test: /\.json?$/,
      loader: 'json'
    }, {
        test: /\.scss$/,
        loader: ExtractTextPlugin.extract('style', 'css?sourceMap&modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]!postcss!sass')
    }, {
        test: /\.css$/,
        loader: 'style-loader!css-loader'
    },{
        test: /\.(png|jpg|jpeg|gif|svg|woff|woff2)$/,
        loader: "url-loader?limit=10000"
    },{
        test: /\.less$/, loader: "style-loader!css-loader!less-loader"
    },{
        test: /\.(ttf|eot|svg|woff|woff2)(\?v=[0-9]\.[0-9]\.[0-9])?$/, 
        loader: "file-loader"
    }]
  }
};

server.js file content is as follows:

const path = require("path");  
const express = require("express");  
const webpack = require("webpack");  
const webpackDevMiddleware = require("webpack-dev-middleware");  
const webpackHotMiddleware = require("webpack-hot-middleware");  
const config = require("./webpack.config.js");

const app           = express(),  
      DIST_DIR      = path.join(__dirname, "dist"),
      HTML_FILE     = path.join(DIST_DIR, "index.html"),
      isDevelopment = process.env.NODE_ENV !== "production",
      DEFAULT_PORT  = 3000,
      compiler      = webpack(config);

app.set("port", process.env.PORT || DEFAULT_PORT);

if (isDevelopment) {  
    app.use(webpackDevMiddleware(compiler, {
        publicPath: config.output.publicPath
    }));

    app.use(webpackHotMiddleware(compiler));

    app.get("*", (req, res, next) => {
        compiler.outputFileSystem.readFile(HTML_FILE, (err, result) => {
            if (err) {
                return next(err);
            }
            res.set('content-type', 'text/html');
            res.send(result);
            res.end();
        });
    });
}

else {  
    app.use(express.static(DIST_DIR));

    app.get("*", (req, res) => res.sendFile(HTML_FILE));
}

app.listen(app.get("port"));

package.json is as follows:

"main": "server.js",
  "script": {
    "start": "babel-node server-es6.js",
    "build:server": "babel server-es6.js --out-file server.js",
    "build:client": "webpack -p --config webpack.config.js --progress"
  },

Site is loading but some css are not loading. Console throw error:

GET http://bundle.css/ net::ERR_NAME_NOT_RESOLVED

Triyugi commented 7 years ago

Followup of #77

Triyugi commented 7 years ago

In fact, I am not able to access resources like, images. Image path comes correctly as http://localhost:3000/img/img1.png but its not showing in browser. I think issue is with webpack publickpath.

Triyugi commented 7 years ago

When I am using <img src={require('/images/image-name.png')} />, its working fine. But I don't want to do that because its very heavy codebase and also I think its not a nice solution.

Triyugi commented 7 years ago

In chrome Network tool, image type is coming as text/html.