const autoprefixer = require('autoprefixer'); const cssvars = require('postcss-simple-vars'); const webpack = require('webpack'); const HtmlWebPackPlugin = require("html-webpack-plugin"); const paths = require('./paths'); const getClientEnvironment = require('./env'); const publicPath = '/'; // `publicUrl` we will provide it to our app // as %PUBLIC_URL% in `index.html` and `process.env.PUBLIC_URL` in JavaScript. // Omit trailing slash as %PUBLIC_PATH%/xyz looks better than %PUBLIC_PATH%xyz. var publicUrl = ''; // Get environment variables to inject into our app. var env = getClientEnvironment(publicUrl); const cssvariables = require(paths.appSrc + '/theme/variables'); const postcssPlugins = [ autoprefixer({ browsers: [ '>1%', 'last 4 versions', 'Firefox ESR', 'not ie < 9', // React doesn't support IE8 anyway ] }), cssvars({ variables: function () { return Object.assign({}, cssvariables); }, silent: false }), ]; module.exports = { devtool: 'eval-source-map', mode: 'development', entry: [ "babel-polyfill", // Include an alternative client for WebpackDevServer. A client's job is to // connect to WebpackDevServer by a socket and get notified about changes. // When you save a file, the client will either apply hot updates (in case // of CSS changes), or refresh the page (in case of JS changes). When you // make a syntax error, this client will display a syntax error overlay. // Note: instead of the default WebpackDevServer client, we use a custom one // to bring better experience for Create React App users. You can replace // the line below with these two lines if you prefer the stock client: // require.resolve('webpack-dev-server/client') + '?/', // require.resolve('webpack/hot/dev-server'), require.resolve('react-dev-utils/webpackHotDevClient'), // We ship a few polyfills by default: require.resolve('./polyfills'), // Finally, this is your app's code: paths.appIndexJs // We include the app code last so that if there is a runtime error during // initialization, it doesn't blow up the WebpackDevServer client, and // changing JS code would still trigger a refresh. ], resolve: { // These are the reasonable defaults supported by the Node ecosystem. // We also include JSX as a common component filename extension to support // some tools, although we do not recommend using it, see: // https://github.com/facebookincubator/create-react-app/issues/290 extensions: ['.js', '.json', '.jsx'], }, output: { // Next line is not used in dev but WebpackDevServer crashes without it: path: paths.appBuild, // Add /* filename */ comments to generated require()s in the output. pathinfo: true, // This does not produce a real file. It's just the virtual path that is // served by WebpackDevServer in development. This is the JS bundle // containing code from all our entry points, and the Webpack runtime. filename: 'static/js/bundle.js', // This is the URL that app is served from. We use "/" in development. publicPath: publicPath }, module: { rules: [ { test: /\.(js|jsx)$/, exclude: /node_modules/, use: { loader: "babel-loader" } }, { test: /\.(scss|css)$/, use: [ 'style-loader', { loader: 'css-loader', options: { importLoaders: 1, modules: true, minimize: false, localIdentName: '[name]__[local]___[hash:base64:5]', } }, { loader: 'postcss-loader', options: { sourceMap: true, plugins: postcssPlugins, }, }, ], }, { test: /\.html$/, use: [ { loader: "html-loader", options: { minimize: false } } ] } ] }, plugins: [ new HtmlWebPackPlugin({ template: paths.appHtml, }), new webpack.DefinePlugin(env), new webpack.HotModuleReplacementPlugin(), ], // Some libraries import Node modules but don't use them in the browser. // Tell Webpack to provide empty mocks for them so importing them works. node: { fs: 'empty', net: 'empty', tls: 'empty' } };