UNPKG

@mongodb-js/compass-query-bar

Version:

Renders a component for executing MongoDB queries through a GUI.

190 lines (179 loc) 5.06 kB
const webpack = require('webpack'); const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const { spawn } = require('child_process'); const project = require('./project'); const GLOBALS = { 'process.env': { 'NODE_ENV': JSON.stringify('development') }, __DEV__: JSON.stringify(JSON.parse('true')) }; module.exports = { target: 'electron-renderer', entry: { index: [ // activate HMR for React 'react-hot-loader/patch', // bundle the client for webpack-dev-server // and connect to the provided endpoint 'webpack-dev-server/client?http://0.0.0.0:8080', // bundle the client for hot reloading // only- means to only hot reload for successful updates 'webpack/hot/only-dev-server', // the entry point of our plugin for dev path.resolve(project.path.electron, 'renderer/index.js') ] }, output: { path: project.path.output, publicPath: '/', filename: '[name].js' }, resolve: { modules: ['node_modules'], extensions: ['.js', '.jsx', '.json', 'less'], alias: { actions: path.join(project.path.src, 'actions'), components: path.join(project.path.src, 'components'), constants: path.join(project.path.src, 'constants'), fonts: path.join(project.path.src, 'assets/fonts'), images: path.join(project.path.src, 'assets/images'), less: path.join(project.path.src, 'assets/less'), models: path.join(project.path.src, 'models'), plugin: path.join(project.path.src, 'index.js'), stores: path.join(project.path.src, 'stores'), storybook: project.path.storybook } }, module: { rules: [ { test: /\.css$/, use: [ { loader: 'style-loader'}, { loader: 'css-loader' } ] }, // For styles that have to be global (see https://github.com/css-modules/css-modules/pull/65) { test: /\.less$/, include: [/\.global/, /bootstrap/], use: [ { loader: 'style-loader' }, { loader: 'css-loader', options: { modules: false } }, { loader: 'postcss-loader', options: { plugins: function() { return [ project.plugin.autoprefixer ]; } } }, { loader: 'less-loader', options: { noIeCompat: true } } ] }, // For CSS-Modules locally scoped styles { test: /\.less$/, exclude: [/\.global/, /bootstrap/, /node_modules/], use: [ { loader: 'style-loader' }, { loader: 'css-loader', options: { modules: true, importLoaders: 1, localIdentName: 'QueryBar_[name]-[local]__[hash:base64:5]' } }, { loader: 'postcss-loader', options: { plugins: function() { return [ project.plugin.autoprefixer ]; } } }, { loader: 'less-loader', options: { noIeCompat: true } } ] }, { test: /node_modules[\\\/]JSONStream[\\\/]index\.js/, use: [{ loader: 'shebang-loader' }] }, { test: /\.(js|jsx)$/, use: [{ loader: 'babel-loader' }], exclude: /(node_modules)/ }, { test: /\.(png|jpg|jpeg|gif|svg)$/, use: [{ loader: 'url-loader', query: { limit: 8192, name: 'assets/images/[name]__[hash:base64:5].[ext]' } }] }, { test: /\.(woff|woff2|ttf|eot)(\?v=\d+\.\d+\.\d+)?$/, use: [{ loader: 'url-loader', query: { limit: 8192, name: 'assets/fonts/[name]__[hash:base64:5].[ext]' } }] } ] }, plugins: [ // Enable HMR globally new webpack.HotModuleReplacementPlugin(), // Prints more readable module names in the browser console on HMR updates new webpack.NamedModulesPlugin(), // Do not emit compiled assets that include errors new webpack.NoEmitOnErrorsPlugin(), // Creates HTML page for us at build time new HtmlWebpackPlugin(), // Defines global variables new webpack.DefinePlugin(GLOBALS) ], devtool: 'cheap-source-map', devServer: { host: '0.0.0.0', hot: true, contentBase: project.path.output, stats: { colors: true, chunks: false, children: false }, setup() { spawn('electron', [project.path.electron], { shell: true, env: process.env, stdio: 'inherit' }) .on('close', () => process.exit(0)) .on('error', spawnError => console.error(spawnError)); // eslint-disable-line no-console } } };