@mongodb-js/compass-query-bar
Version:
Renders a component for executing MongoDB queries through a GUI.
169 lines (162 loc) • 4.6 kB
JavaScript
const webpack = require('webpack');
const path = require('path');
const PeerDepsExternalsPlugin = require('peer-deps-externals-webpack-plugin');
const project = require('./project');
const GLOBALS = {
'process.env': {
'NODE_ENV': JSON.stringify('development')
},
__DEV__: JSON.stringify(JSON.parse(process.env.DEBUG || 'true'))
};
module.exports = {
target: 'electron-renderer',
watch: true,
entry: {
// Export the entry to our plugin. Referenced in package.json main.
index: path.resolve(project.path.src, 'index.js')
},
output: {
path: project.path.output,
publicPath: '/',
filename: '[name].js',
// Export our plugin as a UMD library (compatible with all module definitions - CommonJS, AMD and global variable)
library: 'QueryBarPlugin',
libraryTarget: 'umd'
},
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: [
// Auto-create webpack externals for any dependency listed as a peerDependency in package.json
// so that the external vendor JavaScript is not part of our compiled bundle
new PeerDepsExternalsPlugin(),
// 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(),
// Defines global variables
new webpack.DefinePlugin(GLOBALS)
],
devtool: 'cheap-source-map',
stats: {
colors: true,
children: false,
chunks: false,
modules: false
}
};