// Magic to include node_modules of root WebODM's directory const fs = require('fs'); let webodmRoot = "../../../"; // Assuming plugins//public if (!fs.existsSync(webodmRoot + "webodm.sh")) webodmRoot = "../../../../../"; // Assuming app/media/plugins//public process.env.NODE_PATH = webodmRoot + "node_modules"; require("module").Module._initPaths(); let path = require("path"); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); module.exports = { mode: 'production', context: __dirname, entry: ${entry_json}, output: { path: path.join(__dirname, './build'), filename: "[name].js", libraryTarget: "amd" }, plugins: [ new MiniCssExtractPlugin({ filename: '[name].css', chunkFilename: '[id].css' }) ], module: { rules: [ { test: /\.jsx?$$/, exclude: /(node_modules|bower_components)/, use: [ { loader: 'babel-loader', options: { plugins: [ '@babel/syntax-class-properties', '@babel/proposal-class-properties' ], presets: [ '@babel/preset-env', '@babel/preset-react' ] } } ], }, { test: /\.s?css$$/, use: [ MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader', ] }, { test: /\.(png|jpg|jpeg|svg)/, use: { loader: 'url-loader', options: { limit: 100000, }, }, }, ] }, resolve: { modules: ['node_modules', 'bower_components'], extensions: ['.js', '.jsx'], alias: { webodm: path.resolve(__dirname, webodmRoot + 'app/static/app/js') } }, externals: { // require("jquery") is external and available // on the global let jQuery "jquery": "jQuery", "SystemJS": "SystemJS", "PluginsAPI": "PluginsAPI", "leaflet": "leaflet", "ReactDOM": "ReactDOM", "React": "React" }, watchOptions: { ignored: ['node_modules', './**/*.py'], aggregateTimeout: 300, poll: 1000 } }