const path = require("path"); const SRC_DIR = path.join(__dirname, "client/src"); const DIST_DIR = path.join(__dirname, "server/dist/public"); const webpack = require('webpack') const nodeExternals = require("webpack-node-externals"); const js = { test: /\.js$/, exclude: /node_modules/, use: { loader: "babel-loader", options: { presets: ["@babel/preset-react"], plugins: ["transform-class-properties"] } } }; const jsx = { test: /\.jsx?/, loader: "babel-loader", options: { presets: ["@babel/preset-env", "@babel/preset-react"] } }; const serverConfig = { mode: "development", target: 'node', node: { fs: 'empty', __dirname: false }, externals: [nodeExternals()], entry: { "server.js": path.resolve(__dirname, "server/server.js") }, plugins: [ new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', }) ], module: { rules: [js, jsx] }, output: { path: path.resolve(__dirname, "server/dist"), filename: "[name]" } }; const clientConfig = { mode: "development", target: "web", entry: `${SRC_DIR}/components/index.jsx`, output: { filename: "bundle.js", path: DIST_DIR }, plugins: [ new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', }) ], module: { rules: [ { test: /\.jsx?/, loader: "babel-loader", options: { presets: ["@babel/preset-env", "@babel/preset-react"] } }, // { // test: /\.css$/i, // use: ["style-loader", "css-loader"] // }, { test: /\.css$/, loader: 'style-loader!css-loader?modules=true&localIdentName=[name]__[local]___[hash:base64:5]' } ] } }; module.exports = [serverConfig, clientConfig];