UNPKG

@coocoon/react-awesome-query-builder

Version:

User-friendly query builder for React. Demo: https://ukrbublik.github.io/react-awesome-query-builder

173 lines (165 loc) 4.72 kB
const webpack = require('webpack'); const path = require('path'); const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; const MomentLocalesPlugin = require('moment-locales-webpack-plugin'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin'); const MODE = process.env.NODE_ENV || "development"; const PORT = 3001; const lib_name = 'react-awesome-query-builder'; const isProd = (MODE != "development"); const isDev = (MODE == "development"); const isAnalyze = process.env.ANALYZE == "1"; const isSeparateCss = process.env.CSS == "1"; const EXAMPLES = __dirname; const RAQB_NODE_MODULES = path.resolve(EXAMPLES, '../node_modules/'); const MODULES = path.resolve(EXAMPLES, '../modules/'); const DIST = path.resolve(EXAMPLES, './build'); let plugins = [ new webpack.DefinePlugin({ 'process.env': { NODE_ENV: JSON.stringify(MODE), } }), new webpack.ProvidePlugin({ process: 'process/browser', Buffer: ['buffer', 'Buffer'], }), ]; let aliases = { [lib_name]: MODULES }; let style_loaders = [{ loader: "style-loader" }]; if (isProd) { plugins = [ ...plugins, new webpack.ContextReplacementPlugin(/moment[/\\]locale$/, /en|ru|es-us/), new MomentLocalesPlugin({ localesToKeep: ['es-us', 'ru'], }), ]; } if (isSeparateCss) { plugins = [ ...plugins, new MiniCssExtractPlugin({ filename: path.resolve(DIST, 'bundle.css') }), ]; style_loaders = [ MiniCssExtractPlugin.loader ]; } if (isAnalyze) { plugins = [ ...plugins, new BundleAnalyzerPlugin() ]; } if (isDev) { plugins = [ ...plugins, new ReactRefreshWebpackPlugin() ]; } const babel_options = { presets: [ '@babel/preset-env', '@babel/preset-react', '@babel/preset-typescript', // or can use 'ts-loader' instead ], plugins: [ ["@babel/plugin-proposal-decorators", { "legacy": true }], ["@babel/plugin-proposal-class-properties", { "loose": true }], ["@babel/plugin-proposal-private-methods", { "loose": true }], ["@babel/plugin-proposal-private-property-in-object", { "loose": true }], "@babel/plugin-transform-runtime", ...(isDev ? ["react-refresh/babel"] : []), ["import", { "libraryName": "antd", "style": false, "libraryDirectory": "es" }], ] }; module.exports = { plugins, mode: MODE, devtool: isProd ? 'source-map' : 'source-map', devServer: { port: PORT, historyApiFallback: true, hot: true, static: { directory: path.join(__dirname, '/'), }, }, entry: './index', output: { path: DIST, filename: 'bundle.js' }, resolve: { modules: [ // combine with parent node_modules 'node_modules', RAQB_NODE_MODULES, ], alias: aliases, extensions: ['.tsx', '.ts', '.js', '.jsx'] }, module: { rules: [ { test: /\.[jt]sx?$/, exclude: /node_modules/, use: [{ loader: 'babel-loader', options: { ...babel_options, cacheDirectory: true } }] }, { test: /\.css$/, use: [...style_loaders, "css-loader"] }, { test: /\.scss$/, use: [...style_loaders, { loader: "css-loader" }, { loader: "sass-loader" }] }, { test: /\.less$/, use: [...style_loaders, { loader: "css-loader" }, { loader: "less-loader", options: { lessOptions: { javascriptEnabled: true } } }] }, { test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, loader: "url-loader", options: { limit: 10000, minetype: 'application/font-woff' } }, { test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/, loader: "file-loader" } ] } };