From ecbc764e79b205f7e7c008c5c859297c64d45a80 Mon Sep 17 00:00:00 2001 From: Dmitry Krupenya Date: Tue, 19 May 2020 14:51:06 +0300 Subject: [PATCH] chore: cleanup webpack config --- webapp/package.json | 10 +- webapp/packages/_plugin-template/package.json | 2 +- webapp/packages/administration/package.json | 2 +- webapp/packages/ag-grid-plugin/package.json | 2 +- webapp/packages/authentication/package.json | 2 +- .../basic-connection-plugin/package.json | 2 +- webapp/packages/builder/bin/index.js | 56 ++---- .../{babel.config.js => babel-app.config.js} | 0 ...ollup.config.js => babel-plugin.config.js} | 0 .../packages/builder/configs/rollup.config.js | 11 +- .../builder/configs/webpack-build-config.js | 22 ++ .../builder/configs/webpack-common-config.js | 167 ++++++++++++++++ .../builder/configs/webpack-serve-config.js | 27 +++ .../builder/configs/webpack/build-plugin.js | 23 --- .../builder/configs/webpack/common-exp.js | 108 ---------- .../builder/configs/webpack/common-root.js | 188 ------------------ .../builder/configs/webpack/common.js | 108 ---------- .../builder/configs/webpack/dev-exp.js | 27 --- .../packages/builder/configs/webpack/dev.js | 30 --- .../packages/builder/configs/webpack/exp.js | 22 -- .../packages/builder/configs/webpack/prod.js | 22 -- webapp/packages/core/package.json | 2 +- .../custom-connection-plugin/package.json | 2 +- .../packages/data-export-plugin/package.json | 2 +- .../packages/data-viewer-plugin/package.json | 2 +- webapp/packages/dbeaver/package.json | 9 +- .../packages/ddl-viewer-plugin/package.json | 2 +- .../object-viewer-plugin/package.json | 2 +- webapp/packages/sql-editor/package.json | 2 +- 29 files changed, 258 insertions(+), 596 deletions(-) rename webapp/packages/builder/configs/{babel.config.js => babel-app.config.js} (100%) rename webapp/packages/builder/configs/{babel-rollup.config.js => babel-plugin.config.js} (100%) create mode 100644 webapp/packages/builder/configs/webpack-build-config.js create mode 100644 webapp/packages/builder/configs/webpack-common-config.js create mode 100644 webapp/packages/builder/configs/webpack-serve-config.js delete mode 100644 webapp/packages/builder/configs/webpack/build-plugin.js delete mode 100644 webapp/packages/builder/configs/webpack/common-exp.js delete mode 100644 webapp/packages/builder/configs/webpack/common-root.js delete mode 100644 webapp/packages/builder/configs/webpack/common.js delete mode 100644 webapp/packages/builder/configs/webpack/dev-exp.js delete mode 100644 webapp/packages/builder/configs/webpack/dev.js delete mode 100644 webapp/packages/builder/configs/webpack/exp.js delete mode 100644 webapp/packages/builder/configs/webpack/prod.js diff --git a/webapp/package.json b/webapp/package.json index c7c73b0985..5afd54f6dc 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -14,12 +14,10 @@ "scripts": { "bootstrap": "lerna bootstrap", "build": "lerna run build --stream", - "build-plugin": "lerna run build-plugin --stream", - "clean-dist": "lerna run clean-dist", - "start": "lerna run start --stream", - "test": "echo \"Error: no test specified\" && exit 1", - "tsc": "lerna run tsc --stream", - "watch": "lerna run watch --stream" + "serve": "lerna run serve --stream", + "serve-plugin": "lerna run serve-plugin --stream --parallel", + "clean-dist": "lerna run clean-dist --stream", + "test": "echo \"Error: no test specified\" && exit 1" }, "dependencies": { "@babel/runtime": "7.8.4" diff --git a/webapp/packages/_plugin-template/package.json b/webapp/packages/_plugin-template/package.json index 1b1844e982..9be06fb3cd 100644 --- a/webapp/packages/_plugin-template/package.json +++ b/webapp/packages/_plugin-template/package.json @@ -6,7 +6,7 @@ "main": "dist/index.js", "module": "dist/index.js", "scripts": { - "build-plugin": "npm run clean-dist && builder build-plugin", + "build": "npm run clean-dist && builder build-plugin", "serve-plugin": "builder serve-plugin", "clean-dist": "rimraf dist/*", "test": "echo \"Error: no test specified\" && exit 1" diff --git a/webapp/packages/administration/package.json b/webapp/packages/administration/package.json index be6a8d7976..ed5bf95113 100644 --- a/webapp/packages/administration/package.json +++ b/webapp/packages/administration/package.json @@ -6,7 +6,7 @@ "main": "dist/index.js", "types": "dist/types", "scripts": { - "build-plugin": "npm run clean-dist && builder build-plugin", + "build": "npm run clean-dist && builder build-plugin", "serve-plugin": "builder serve-plugin", "clean-dist": "rimraf dist/*", "test": "echo \"Error: no test specified\" && exit 1" diff --git a/webapp/packages/ag-grid-plugin/package.json b/webapp/packages/ag-grid-plugin/package.json index f99c9a8c12..419a2b1d94 100644 --- a/webapp/packages/ag-grid-plugin/package.json +++ b/webapp/packages/ag-grid-plugin/package.json @@ -6,7 +6,7 @@ "main": "dist/index.js", "types": "dist/types", "scripts": { - "build-plugin": "npm run clean-dist && builder build-plugin", + "build": "npm run clean-dist && builder build-plugin", "serve-plugin": "builder serve-plugin", "clean-dist": "rimraf dist/*", "test": "echo \"Error: no test specified\" && exit 1" diff --git a/webapp/packages/authentication/package.json b/webapp/packages/authentication/package.json index e19580d2fe..702239de26 100644 --- a/webapp/packages/authentication/package.json +++ b/webapp/packages/authentication/package.json @@ -6,7 +6,7 @@ "main": "dist/index.js", "types": "dist/types", "scripts": { - "build-plugin": "npm run clean-dist && builder build-plugin", + "build": "npm run clean-dist && builder build-plugin", "serve-plugin": "builder serve-plugin", "clean-dist": "rimraf dist/*", "test": "echo \"Error: no test specified\" && exit 1" diff --git a/webapp/packages/basic-connection-plugin/package.json b/webapp/packages/basic-connection-plugin/package.json index d84400b9d2..0d3b334c20 100644 --- a/webapp/packages/basic-connection-plugin/package.json +++ b/webapp/packages/basic-connection-plugin/package.json @@ -7,7 +7,7 @@ "module": "dist/index.js", "types": "dist/types", "scripts": { - "build-plugin": "npm run clean-dist && builder build-plugin", + "build": "npm run clean-dist && builder build-plugin", "serve-plugin": "builder serve-plugin", "clean-dist": "rimraf dist/*", "test": "echo \"Error: no test specified\" && exit 1" diff --git a/webapp/packages/builder/bin/index.js b/webapp/packages/builder/bin/index.js index 8867ff9494..6106aab3b4 100644 --- a/webapp/packages/builder/bin/index.js +++ b/webapp/packages/builder/bin/index.js @@ -8,8 +8,8 @@ */ const webpack = require('webpack'); -const buildConfig = require('../configs/webpack/exp') -const devConfig = require('../configs/webpack/dev-exp') +const buildConfig = require('../configs/webpack-build-config'); +const devConfig = require('../configs/webpack-serve-config'); const baseRollupConfig = require('../configs/rollup.config.js'); const rollup = require('rollup'); const path = require('path'); @@ -32,7 +32,7 @@ function createWebpackArgv(argv) { pluginsList.unshift('@dbeaver/core') const webpackArgv = { - mode: 'production', + mode: argv.mode, pluginsList: pluginsList, currentDir: currentDir, @@ -48,6 +48,7 @@ const packageName = packageJson.name; function createRollupConfig() { let modules = [] try { + // required if you build plugin with several modules, for example, see @dbeaver/core modules = require(path.join(currentDir, 'modules.js')); } catch { } @@ -116,7 +117,6 @@ require('yargs') .command( 'serve-plugin', 'Build and watch plugin', - {}, function (argv) { const rollup = require('rollup'); @@ -136,7 +136,12 @@ require('yargs') .command( 'build-app', 'Build application', - {}, + { + mode: { + alias: 'm', + default: 'production', + }, + }, function (argv) { const webpackArgv = createWebpackArgv(argv); // console.log(webpackArgv) @@ -159,7 +164,11 @@ require('yargs') port: { alias: 'p', default: 3100 - } + }, + mode: { + alias: 'm', + default: 'development', + }, }, function (argv) { const webpackArgv = createWebpackArgv(argv); @@ -178,39 +187,4 @@ require('yargs') }); } ) - // todo deprecated, just for test purposes - .command( - 'serve-app-old', - 'Start webpack dev server for serving application', - { - server: { - alias: 's', - default: 'localhost:3100' - }, - port: { - alias: 'p', - default: 3100 - } - }, - function (argv) { - console.log('Serve app old way') - console.log(argv) - const webpackArgv = createWebpackArgv(argv); - webpackArgv.mode = 'development' - webpackArgv.server = argv.server - const devConfigOld = require('../configs/webpack/dev') - const configObject = devConfigOld({}, webpackArgv) - console.log(configObject.devServer) - const WebpackDevServer = require('webpack-dev-server'); - const server = new WebpackDevServer(webpack(configObject), configObject.devServer); - const port = argv.port - - server.listen(port, 'localhost', function (err) { - if (err) { - console.log(err); - } - console.log('WebpackDevServer listening at localhost:', port); - }); - } - ) .help().argv; diff --git a/webapp/packages/builder/configs/babel.config.js b/webapp/packages/builder/configs/babel-app.config.js similarity index 100% rename from webapp/packages/builder/configs/babel.config.js rename to webapp/packages/builder/configs/babel-app.config.js diff --git a/webapp/packages/builder/configs/babel-rollup.config.js b/webapp/packages/builder/configs/babel-plugin.config.js similarity index 100% rename from webapp/packages/builder/configs/babel-rollup.config.js rename to webapp/packages/builder/configs/babel-plugin.config.js diff --git a/webapp/packages/builder/configs/rollup.config.js b/webapp/packages/builder/configs/rollup.config.js index f069ff7e96..1e803b70d0 100644 --- a/webapp/packages/builder/configs/rollup.config.js +++ b/webapp/packages/builder/configs/rollup.config.js @@ -18,7 +18,7 @@ const includePathOptions = { }; const defaultBuilderOptions = { - babelConfig: path.join(__dirname, './babel-rollup.config.js'), + babelConfig: path.join(__dirname, './babel-plugin.config.js'), typescriptConfig: '', // tbd } @@ -34,9 +34,16 @@ function configBuilder(options = defaultBuilderOptions) { external: [ // externals beyond peer dependencies ], + onwarn(warning, warn) { + // hides some warning drom ag-grid-plugin todo to investigate later + if (warning.code === 'THIS_IS_UNDEFINED') return; + warn(warning); // this requires Rollup 0.46 + }, plugins: [ includePaths(includePathOptions), - nodeResolve(), + nodeResolve({ + preferBuiltins: true, // fix crypto import in core/utils/uuid library. todo replace uuid library with simple uuid generation + }), commonjs({ sourceMap: false, }), diff --git a/webapp/packages/builder/configs/webpack-build-config.js b/webapp/packages/builder/configs/webpack-build-config.js new file mode 100644 index 0000000000..b67f7463e1 --- /dev/null +++ b/webapp/packages/builder/configs/webpack-build-config.js @@ -0,0 +1,22 @@ +// production config +const merge = require('webpack-merge'); +const path = require('path'); + +const commonConfig = require('./webpack-common-config'); + +module.exports = (env, argv) => merge(commonConfig(env, argv), { + mode: argv.mode, + entry: './index.js', + output: { + filename: 'js/bundle.[hash].js', + path: path.resolve(argv.currentDir, './dist'), + publicPath: '', + }, + devtool: 'source-map', + plugins: [], + optimization: { + minimize: false, + namedModules: true, + concatenateModules: false, + }, +}); diff --git a/webapp/packages/builder/configs/webpack-common-config.js b/webapp/packages/builder/configs/webpack-common-config.js new file mode 100644 index 0000000000..30a5f57355 --- /dev/null +++ b/webapp/packages/builder/configs/webpack-common-config.js @@ -0,0 +1,167 @@ +/* + * cloudbeaver - Cloud Database Manager + * Copyright (C) 2020 DBeaver Corp and others + * + * Licensed under the Apache License, Version 2.0. + * you may not use this file except in compliance with the License. + */ + +const webpack = require('webpack'); +const CircularDependencyPlugin = require('circular-dependency-plugin'); +const MiniCssExtractPlugin = require('mini-css-extract-plugin'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const CopyWebpackPlugin = require('copy-webpack-plugin'); +const StringReplacePlugin = require("string-replace-webpack-plugin"); +const resolve = require('resolve'); +const path = require('path'); +const fs = require('fs'); + +function replacementWithPluginImportCode(pluginsList) { + + let code = ''; + const names = []; + + pluginsList.forEach(plugin => { + const name = plugin + .split('') + .filter(char => /[a-zA-Z]/.test(char)) + .join(''); + names.push(name); + + code += `import ${name} from '${plugin}';\n`; + }) + code += ` +const PLUGINS = [ +${names.map(n => ` ${n},\n`).join('')}]`; + return code; +} + +function dirExists(path) { + try { + const stats = fs.statSync(path) + return stats && stats.isDirectory() + } catch (e) { + console.log(e) + return false; + } +} + +function copyPublic(currentDir, pluginsList) { + const pathsToCopy = []; + pluginsList.forEach(plugin => { + try { + const pathToPlugin = resolve.sync(plugin); + const dir = path.parse(pathToPlugin).dir; + const pathToPublic = path.resolve(dir, '../public'); + if (dirExists(pathToPublic)) { + pathsToCopy.push({ + from: pathToPublic, + to: '', + }); + } + } catch (e) { + console.error(e); + } + }); + const pathToAppPublic = path.resolve(currentDir, './public') + if (dirExists(pathToAppPublic)) { + pathsToCopy.push({from: path.resolve(currentDir, './public'), to: ''}); + } + return pathsToCopy; +} + +module.exports = (env, argv) => { + return { + context: path.resolve(__dirname, '../src'), + resolve: { + extensions: ['.js'], + alias: { + react: 'preact/compat', + react$: 'preact/compat', + 'react-dom': 'preact/compat', + 'react-dom$': 'preact/compat', + }, + }, + module: { + rules: [ + { + test: /\.js$/, + use: [ + { + loader: 'babel-loader', + options: { + configFile: path.join(__dirname, './babel-app.config.js') + }, + }, + { + loader: StringReplacePlugin.replace({ + /** + * This replacement allows to put into the build the plugins that were mentioned in package.json + */ + replacements: [ + { + pattern: /const PLUGINS = \[]/ig, + replacement: function (match, p1, offset, string) { + return replacementWithPluginImportCode(argv.pluginsList); + } + } + ] + }) + }, + 'source-map-loader' + ], + exclude: /node_modules/, + }, + ], + }, + plugins: [ + new CopyWebpackPlugin(copyPublic(argv.currentDir, argv.pluginsList)), + new HtmlWebpackPlugin({ + template: path.resolve(argv.currentDir, './index.html.ejs'), + }), + new webpack.DefinePlugin({ + version: JSON.stringify(require(path.resolve(argv.currentDir, './package.json')).buildVersion), + }), + new webpack.ProgressPlugin({ + entries: true, + modules: true, + modulesCount: 100, + profile: true, + // handler: (percentage, message, ...args) => { + // // custom logic + // } + }), + new CircularDependencyPlugin({ + // exclude detection of files based on a RegExp + // exclude: /\.js|node_modules/, + // include specific files based on a RegExp + // include: /dir/, + // add errors to webpack instead of warnings + failOnError: false, + // allow import cycles that include an asyncronous import, + // e.g. via import(/* webpackMode: "weak" */ './file.js') + allowAsyncCycles: false, + // set the current working directory for displaying module paths + cwd: process.cwd(), + }), + new MiniCssExtractPlugin({ + // Options similar to the same options in webpackOptions.output + // all options are optional + filename: argv.mode !== 'production' ? '[name].css' : '[name].[hash].css', + chunkFilename: argv.mode !== 'production' ? '[name].css' : '[name].[hash].css', + ignoreOrder: false, // Enable to remove warnings about conflicting order + }), + // new webpack.optimize.LimitChunkCountPlugin({ + // maxChunks: 1, + // }), + ], + performance: { + hints: false, + }, + optimization: { + minimize: false, + namedModules: true, + concatenateModules: false, + }, + }; +}; diff --git a/webapp/packages/builder/configs/webpack-serve-config.js b/webapp/packages/builder/configs/webpack-serve-config.js new file mode 100644 index 0000000000..950b676d93 --- /dev/null +++ b/webapp/packages/builder/configs/webpack-serve-config.js @@ -0,0 +1,27 @@ +// development config +const merge = require('webpack-merge'); +const webpack = require('webpack'); +const commonConfig = require('./webpack-common-config'); + +module.exports = (env, argv) => merge(commonConfig(env, argv), { + mode: argv.mode, + entry: [ + // 'react-hot-loader/patch', // activate HMR for React + 'webpack-dev-server/client?http://localhost:3100',// bundle the client for webpack-dev-server and connect to the provided endpoint + // 'webpack/hot/only-dev-server', // bundle the client for hot reloading, only- means to only hot reload for successful updates + './index.js' // the entry point of our app + ], + devServer: { + hot: false, // enable HMR on the server + proxy: { + '/dbeaver': { + target: argv.server || 'localhost:3100' + } + } + }, + devtool: 'cheap-module-eval-source-map', + plugins: [ + // new webpack.HotModuleReplacementPlugin(), // enable HMR globally + new webpack.NamedModulesPlugin(), // prints more readable module names in the browser console on HMR updates + ], +}); diff --git a/webapp/packages/builder/configs/webpack/build-plugin.js b/webapp/packages/builder/configs/webpack/build-plugin.js deleted file mode 100644 index df115404ab..0000000000 --- a/webapp/packages/builder/configs/webpack/build-plugin.js +++ /dev/null @@ -1,23 +0,0 @@ -const merge = require('webpack-merge'); -const {resolve} = require('path'); -var PeerDepsExternalsPlugin = require('peer-deps-externals-webpack-plugin'); - -const commonConfig = require('./common'); - -module.exports = (env, argv) => merge(commonConfig(env, argv), { - mode: argv.mode || 'development', - entry: resolve(__dirname, '../../src/index.ts'), // todo - output: { - filename: 'index.js', - path: resolve(__dirname, '../../dist'), - library: 'basicConnectionPlugin', // todo pass from package.js - libraryTarget: 'umd', - }, - externals: [ - /^@dbeaver\/.+$/ - ], - devtool: 'source-map', - plugins: [ - new PeerDepsExternalsPlugin(), // allow to treat all peerDependencies as externals - ], -}); diff --git a/webapp/packages/builder/configs/webpack/common-exp.js b/webapp/packages/builder/configs/webpack/common-exp.js deleted file mode 100644 index ce9cbef6db..0000000000 --- a/webapp/packages/builder/configs/webpack/common-exp.js +++ /dev/null @@ -1,108 +0,0 @@ -const merge = require('webpack-merge'); -const commonConfig = require('./common-root'); -const path = require('path'); -const webpack = require('webpack'); -const HtmlWebpackPlugin = require('html-webpack-plugin'); -const CopyWebpackPlugin = require('copy-webpack-plugin'); -const StringReplacePlugin = require("string-replace-webpack-plugin"); -const resolve = require('resolve'); -const fs = require('fs'); - -function replacementWithPluginImportCode(pluginsList, currentDir) { - - let code = ''; - const names = []; - - pluginsList.forEach(plugin => { - const name = plugin - .split('') - .filter(char => /[a-zA-Z]/.test(char)) - .join(''); - names.push(name); - - code += `import ${name} from '${plugin}';\n`; - }) - code += ` -const PLUGINS = [ -${names.map(n => ` ${n},\n`).join('')}]`; - return code; -} - -function dirExists(path) { - try { - const stats = fs.statSync(path) - return stats && stats.isDirectory() - } catch (e) { - return false; - } -} - -function copyPublic(currentDir, pluginsList) { - const pathsToCopy = []; - pluginsList.forEach(plugin => { - try { - const pathToPlugin = resolve.sync(plugin); - const dir = path.parse(pathToPlugin).dir; - const pathToPublic = path.resolve(dir, '../public'); - if (dirExists(pathToPublic)) { - pathsToCopy.push({ - from: pathToPublic, - to: '', - }); - } - } catch (e) { - console.error(e); - } - }); - const pathToAppPublic = path.resolve(currentDir, './public') - if (dirExists(pathToAppPublic)) { - pathsToCopy.push({from: path.resolve(currentDir, './public'), to: ''}); - } - return pathsToCopy; -} - -module.exports = (env, argv) => merge(commonConfig(env, argv), { - resolve: { - alias: { - react: 'preact/compat', - react$: 'preact/compat', - 'react-dom': 'preact/compat', - 'react-dom$': 'preact/compat', - }, - }, - context: path.resolve(__dirname, '../../src'), - module: { - rules: [ - { - test: /\.js?$/, - use: [ - { - loader: StringReplacePlugin.replace({ - /** - * This replacement allows to put into the build the plugins that were mentioned in package.json - */ - replacements: [ - { - pattern: /const PLUGINS = \[]/ig, - replacement: function (match, p1, offset, string) { - return replacementWithPluginImportCode(argv.pluginsList, argv.currentDir); - } - } - ] - }) - } - ], - }, - ], - }, - plugins: [ - new CopyWebpackPlugin(copyPublic(argv.currentDir, argv.pluginsList)), - new HtmlWebpackPlugin({ - template: path.resolve(argv.currentDir, './index.html.ejs'), - }), - new webpack.DefinePlugin({ - version: JSON.stringify(require(path.resolve(argv.currentDir, './package.json')).buildVersion), - }), - ], - -}); diff --git a/webapp/packages/builder/configs/webpack/common-root.js b/webapp/packages/builder/configs/webpack/common-root.js deleted file mode 100644 index 9e638cb8e3..0000000000 --- a/webapp/packages/builder/configs/webpack/common-root.js +++ /dev/null @@ -1,188 +0,0 @@ -// shared config (dev and prod) -const webpack = require('webpack'); -const ModuleDependencyWarning = require("webpack/lib/ModuleDependencyWarning"); -const path = require('path'); -const CircularDependencyPlugin = require('circular-dependency-plugin'); -const MiniCssExtractPlugin = require('mini-css-extract-plugin'); - - -// Temporary solution to remove wrong warning messages (it's was fixed https://github.com/microsoft/TypeScript/pull/35200 in typescript 3.8) -class IgnoreNotFoundExportPlugin { - apply(compiler) { - const messageRegExp = /export '.*'( \(reexported as '.*'\))? was not found in/ - function doneHook(stats) { - stats.compilation.warnings = stats.compilation.warnings.filter(function (warn) { - if (warn instanceof ModuleDependencyWarning && messageRegExp.test(warn.message)) { - return false - } - return true; - }) - } - if (compiler.hooks) { - compiler.hooks.done.tap("IgnoreNotFoundExportPlugin", doneHook) - } else { - compiler.plugin("done", doneHook) - } - } -} - -module.exports = (env, argv) => { - - function generateStyleLoaders(options = { hasModule: false }) { - const moduleScope = options.hasModule ? 'local' : 'global'; - const modules = { - mode: moduleScope, - localIdentName: '[local]___[hash:base64:5]', - }; - - const postCssPlugins = [ - require('postcss-preset-env')({ stage: 0 }), - require('@csstools/postcss-sass')({ - includePaths: ['node_modules', path.resolve('../../node_modules')], - }), - require('postcss-discard-comments'), - require('reshadow/postcss')({ scopeBehaviour: moduleScope }) - ]; - - // 'use' clause in webpack rules - return [ - { - loader: MiniCssExtractPlugin.loader, - options: { - hot: argv.mode !== 'production', - }, - }, - { - loader: 'css-loader', - options: { - importLoaders: 1, - modules: modules, - } - }, - { - loader: 'postcss-loader', - options: { - syntax: 'postcss-scss', - plugins: postCssPlugins, - }, - }, - ]; - } - - return { - resolve: { - // extensions: ['.ts', '.tsx', '.js', '.jsx'], - extensions: ['.js'], - }, - module: { - rules: [ - { - test: /\.js$/, - use: [ - { - loader: 'babel-loader', - options: { - configFile: path.join(__dirname, '../babel.config.js') - }, - }, - 'source-map-loader' - ], - exclude: /node_modules/, - }, - { - test: /\.tsx?$/, - use: [ - { - loader: 'babel-loader', - options: { - configFile: path.join(__dirname, '../babel.config.js') - }, - }, - { - loader: 'eslint-loader', - // uncomment to fix after rule changes - // options: { - // fix: true, - // }, - } - ], - }, - { - test: /\.(css|scss|sass)$/, - oneOf: [ - // css-module files ( should have *.module mask ) - { - test: /\.module\.(css|scss|sass)$/, - use: generateStyleLoaders({ hasModule: true }), - }, - { - include: /node_modules/, - use: [ - { - loader: MiniCssExtractPlugin.loader, - options: { - hot: argv.mode !== 'production', - }, - }, - 'css-loader', - ] - }, - { - use: generateStyleLoaders({ hasModule: false }), - } - ] - }, - { - test: /\.(png|jpe?g|gif|svg|eot|ttf|woff|woff2)$/i, - loader: 'url-loader', - options: { - limit: 8192, - }, - }, - ], - }, - optimization: { - minimize: false, - namedModules: true, - concatenateModules: false, - }, - plugins: [ - new IgnoreNotFoundExportPlugin(), - new webpack.ProgressPlugin({ - entries: true, - modules: true, - modulesCount: 100, - profile: true, - // handler: (percentage, message, ...args) => { - // // custom logic - // } - }), - new CircularDependencyPlugin({ - // exclude detection of files based on a RegExp - exclude: /a\.js|node_modules/, - // include specific files based on a RegExp - // include: /dir/, - // add errors to webpack instead of warnings - failOnError: false, - // allow import cycles that include an asyncronous import, - // e.g. via import(/* webpackMode: "weak" */ './file.js') - allowAsyncCycles: false, - // set the current working directory for displaying module paths - cwd: process.cwd(), - }), - new MiniCssExtractPlugin({ - // Options similar to the same options in webpackOptions.output - // all options are optional - filename: argv.mode !== 'production' ? '[name].css' : '[name].[hash].css', - chunkFilename: argv.mode !== 'production' ? '[name].css' : '[name].[hash].css', - ignoreOrder: false, // Enable to remove warnings about conflicting order - }), - // new webpack.optimize.LimitChunkCountPlugin({ - // maxChunks: 1, - // }), - ], - performance: { - hints: false, - }, - }; -}; diff --git a/webapp/packages/builder/configs/webpack/common.js b/webapp/packages/builder/configs/webpack/common.js deleted file mode 100644 index 5cf73e28e3..0000000000 --- a/webapp/packages/builder/configs/webpack/common.js +++ /dev/null @@ -1,108 +0,0 @@ -const merge = require('webpack-merge'); -const commonConfig = require('./common-root'); -const path = require('path'); -const webpack = require('webpack'); -const HtmlWebpackPlugin = require('html-webpack-plugin'); -const CopyWebpackPlugin = require('copy-webpack-plugin'); -const StringReplacePlugin = require("string-replace-webpack-plugin"); -const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); - -function replacementWithPluginImportCode(pathToList, currentDir) { - const fullPath = path.resolve(currentDir, pathToList || './plugins-list') - const pluginsList = require(fullPath); - - let code = ''; - const names = []; - - pluginsList.forEach(plugin => { - const name = plugin - .split('') - .filter(char => /[a-zA-Z]/.test(char)) - .join(''); - names.push(name); - - code += `import ${name} from '${plugin}';\n`; - }) - code += ` -const PLUGINS = [ -${names.map(n => ` ${n},\n`).join('')}]`; - return code; -} - - -module.exports = (env, argv) => merge(commonConfig(env, argv), { - resolve: { - alias: { - "@dbeaver/core/assets": path.resolve(__dirname, "../../../core/assets"), - - "@dbeaver/core/app": path.resolve(__dirname, "../../../core/src/app"), - "@dbeaver/core/blocks": path.resolve(__dirname, "../../../core/src/blocks"), - "@dbeaver/core/di": path.resolve(__dirname, "../../../core/src/di"), - "@dbeaver/core/dialogs": path.resolve(__dirname, "../../../core/src/dialogs"), - "@dbeaver/core/eventsLog": path.resolve(__dirname, "../../../core/src/eventsLog"), - "@dbeaver/core/localization": path.resolve(__dirname, "../../../core/src/localization"), - "@dbeaver/core/root": path.resolve(__dirname, "../../../core/src/root"), - "@dbeaver/core/sdk": path.resolve(__dirname, "../../../core/src/sdk"), - "@dbeaver/core/settings": path.resolve(__dirname, "../../../core/src/settings"), - "@dbeaver/core/theming": path.resolve(__dirname, "../../../core/src/theming"), - "@dbeaver/core/utils": path.resolve(__dirname, "../../../core/src/utils"), - "@dbeaver/core/extensions": path.resolve(__dirname, "../../../core/src/extensions"), - "@dbeaver/core/product": path.resolve(__dirname, "../../../core/src/product"), - "@dbeaver/core/plugin": path.resolve(__dirname, "../../../core/src/plugin"), - - react: 'preact/compat', - react$: 'preact/compat', - 'react-dom': 'preact/compat', - 'react-dom$': 'preact/compat', - }, - }, - context: path.resolve(__dirname, '../../src'), - module: { - rules: [ - { - test: /\.tsx?$/, - use: [ - { - loader: StringReplacePlugin.replace({ - /** - * This replacement allows to put into the build the plugins that were mentioned in package.json - */ - replacements: [ - { - pattern: /const PLUGINS = \[]/ig, - replacement: function (match, p1, offset, string) { - return replacementWithPluginImportCode(argv.pluginsList, argv.currentDir); - } - } - ]}) - } - ], - }, - ], - }, - plugins: [ - // new ForkTsCheckerWebpackPlugin({ - // tsconfig: path.resolve(__dirname, '../../tsconfig.json'), - // async: false, // slow but run before dev-server starts todo try set true later - // }), - - /** - * this plugin allows to resolve all @dbeaver/some-plugin packages - */ - new webpack.NormalModuleReplacementPlugin( - /@dbeaver\/[a-zA-z\-]*$/, - resource => { - resource.request = resource.request + '/src/index'; - } - ), - - new CopyWebpackPlugin([ { from: path.resolve(argv.currentDir, './public'), to: '' } ]), - new HtmlWebpackPlugin({ - template: path.resolve(argv.currentDir, './index.html.ejs'), - }), - new webpack.DefinePlugin({ - version: JSON.stringify(require(path.resolve(argv.currentDir, './package.json')).buildVersion), - }), - ], - -}); diff --git a/webapp/packages/builder/configs/webpack/dev-exp.js b/webapp/packages/builder/configs/webpack/dev-exp.js deleted file mode 100644 index 1ef3f59665..0000000000 --- a/webapp/packages/builder/configs/webpack/dev-exp.js +++ /dev/null @@ -1,27 +0,0 @@ -// development config -const merge = require('webpack-merge'); -const webpack = require('webpack'); -const commonConfig = require('./common-exp'); - -module.exports = (env, argv) => merge(commonConfig(env, argv), { - mode: argv.mode || 'development', - entry: [ - // 'react-hot-loader/patch', // activate HMR for React - 'webpack-dev-server/client?http://localhost:3100',// bundle the client for webpack-dev-server and connect to the provided endpoint - // 'webpack/hot/only-dev-server', // bundle the client for hot reloading, only- means to only hot reload for successful updates - './index.js' // the entry point of our app - ], - devServer: { - hot: false, // enable HMR on the server - proxy: { - '/dbeaver': { - target: argv.server || 'localhost:3100' - } - } - }, - // devtool: 'cheap-module-eval-source-map', - plugins: [ - // new webpack.HotModuleReplacementPlugin(), // enable HMR globally - new webpack.NamedModulesPlugin(), // prints more readable module names in the browser console on HMR updates - ], -}); diff --git a/webapp/packages/builder/configs/webpack/dev.js b/webapp/packages/builder/configs/webpack/dev.js deleted file mode 100644 index 0d623ea7cc..0000000000 --- a/webapp/packages/builder/configs/webpack/dev.js +++ /dev/null @@ -1,30 +0,0 @@ -// development config -const merge = require('webpack-merge'); -const webpack = require('webpack'); -const commonConfig = require('./common'); - -module.exports = (env, argv) => merge(commonConfig(env, argv), { - mode: argv.mode || 'development', - entry: [ - // 'react-hot-loader/patch', // activate HMR for React - 'webpack-dev-server/client?http://localhost:3100',// bundle the client for webpack-dev-server and connect to the provided endpoint - // 'webpack/hot/only-dev-server', // bundle the client for hot reloading, only- means to only hot reload for successful updates - './index.ts' // the entry point of our app - ], - devServer: { - hot: true, // enable HMR on the server - proxy: { - '/dbeaver': { - target: argv.server || 'localhost:3100' - } - }, - stats: { - colors: true, - }, - }, - devtool: 'cheap-module-eval-source-map', - plugins: [ - // new webpack.HotModuleReplacementPlugin(), // enable HMR globally - new webpack.NamedModulesPlugin(), // prints more readable module names in the browser console on HMR updates - ], -}); diff --git a/webapp/packages/builder/configs/webpack/exp.js b/webapp/packages/builder/configs/webpack/exp.js deleted file mode 100644 index a3051a182b..0000000000 --- a/webapp/packages/builder/configs/webpack/exp.js +++ /dev/null @@ -1,22 +0,0 @@ -// production config -const merge = require('webpack-merge'); -const {resolve} = require('path'); - -const commonConfig = require('./common-exp'); - -module.exports = (env, argv) => merge(commonConfig(env, argv), { - mode: argv.mode || 'development', - entry: './index.js', - output: { - filename: 'js/bundle.[hash].js', - path: resolve(argv.currentDir, './dist'), - publicPath: '', - }, - devtool: 'source-map', - plugins: [], - optimization: { - minimize: false, - namedModules: true, - concatenateModules: false, - }, -}); diff --git a/webapp/packages/builder/configs/webpack/prod.js b/webapp/packages/builder/configs/webpack/prod.js deleted file mode 100644 index 334246c19e..0000000000 --- a/webapp/packages/builder/configs/webpack/prod.js +++ /dev/null @@ -1,22 +0,0 @@ -// production config -const merge = require('webpack-merge'); -const {resolve} = require('path'); - -const commonConfig = require('./common'); - -module.exports = (env, argv) => merge(commonConfig(env, argv), { - mode: argv.mode || 'development', - entry: './index.ts', - output: { - filename: 'js/bundle.[hash].min.js', - path: resolve(argv.currentDir, './dist'), - publicPath: '', - }, - devtool: 'source-map', - plugins: [], - optimization: { - minimize: true, - namedModules: false, - concatenateModules: true, - }, -}); diff --git a/webapp/packages/core/package.json b/webapp/packages/core/package.json index c5167ae0f3..4deb03d8a8 100644 --- a/webapp/packages/core/package.json +++ b/webapp/packages/core/package.json @@ -7,7 +7,7 @@ "module": "dist/index.js", "types": "dist/types", "scripts": { - "build-plugin": "npm run clean-dist && builder build-plugin", + "build": "npm run clean-dist && builder build-plugin", "serve-plugin": "builder serve-plugin", "build:analyze": "echo \"no analyze specified\" && exit 0", "clean-dist": "rimraf dist/*", diff --git a/webapp/packages/custom-connection-plugin/package.json b/webapp/packages/custom-connection-plugin/package.json index c7224ee747..26feb5bc6c 100644 --- a/webapp/packages/custom-connection-plugin/package.json +++ b/webapp/packages/custom-connection-plugin/package.json @@ -7,7 +7,7 @@ "module": "dist/index.js", "types": "dist/types", "scripts": { - "build-plugin": "npm run clean-dist && builder build-plugin", + "build": "npm run clean-dist && builder build-plugin", "serve-plugin": "builder serve-plugin", "clean-dist": "rimraf dist/*", "test": "echo \"Error: no test specified\" && exit 1" diff --git a/webapp/packages/data-export-plugin/package.json b/webapp/packages/data-export-plugin/package.json index fde107a62b..156b75e8b4 100644 --- a/webapp/packages/data-export-plugin/package.json +++ b/webapp/packages/data-export-plugin/package.json @@ -6,7 +6,7 @@ "main": "dist/index.js", "types": "dist/types", "scripts": { - "build-plugin": "npm run clean-dist && builder build-plugin", + "build": "npm run clean-dist && builder build-plugin", "serve-plugin": "builder serve-plugin", "clean-dist": "rimraf dist/*", "test": "echo \"Error: no test specified\" && exit 1" diff --git a/webapp/packages/data-viewer-plugin/package.json b/webapp/packages/data-viewer-plugin/package.json index 37690b8d79..71d033192f 100644 --- a/webapp/packages/data-viewer-plugin/package.json +++ b/webapp/packages/data-viewer-plugin/package.json @@ -6,7 +6,7 @@ "main": "dist/index.js", "types": "dist/types", "scripts": { - "build-plugin": "npm run clean-dist && builder build-plugin", + "build": "npm run clean-dist && builder build-plugin", "serve-plugin": "builder serve-plugin", "clean-dist": "rimraf dist/*", "test": "echo \"Error: no test specified\" && exit 1" diff --git a/webapp/packages/dbeaver/package.json b/webapp/packages/dbeaver/package.json index 7b5a401790..b960659eba 100644 --- a/webapp/packages/dbeaver/package.json +++ b/webapp/packages/dbeaver/package.json @@ -4,15 +4,10 @@ "description": "", "license": "Apache-2.0", "scripts": { - "build": "npm run clean-dist && webpack -p --config=configs/webpack/prod.js --mode=production", - "build-exp": "npm run clean-dist && webpack -p --config=configs/webpack/exp.js --mode=development", - "build-exp2": "npm run clean-dist && builder build-app", + "build": "npm run clean-dist && builder build-app", + "serve": "builder serve-app", "build:analyze": "echo \"no analyze specified\" && exit 0", "clean-dist": "rimraf dist/*", - "dev": "webpack-dev-server --progress --config=configs/webpack/dev.js --port=3100", - "dev-exp": "webpack-dev-server --progress --config=configs/webpack/dev-exp.js --port=3100", - "dev-exp2": "builder serve-app", - "dev-exp3": "builder serve-app-old", "gql:gen": "graphql-codegen", "gql:gen:dev": "graphql-codegen --watch", "lint": "eslint ./src/ --ext .ts,.tsx", diff --git a/webapp/packages/ddl-viewer-plugin/package.json b/webapp/packages/ddl-viewer-plugin/package.json index 4a9bcc272d..2cfac8e2d2 100644 --- a/webapp/packages/ddl-viewer-plugin/package.json +++ b/webapp/packages/ddl-viewer-plugin/package.json @@ -5,7 +5,7 @@ "license": "Apache-2.0", "main": "dist/index.js", "scripts": { - "build-plugin": "npm run clean-dist && builder build-plugin", + "build": "npm run clean-dist && builder build-plugin", "serve-plugin": "builder serve-plugin", "clean-dist": "rimraf dist/*", "test": "echo \"Error: no test specified\" && exit 1", diff --git a/webapp/packages/object-viewer-plugin/package.json b/webapp/packages/object-viewer-plugin/package.json index 3cd05bdcfb..22661caf01 100644 --- a/webapp/packages/object-viewer-plugin/package.json +++ b/webapp/packages/object-viewer-plugin/package.json @@ -6,7 +6,7 @@ "main": "dist/index.js", "types": "dist/types", "scripts": { - "build-plugin": "npm run clean-dist && builder build-plugin", + "build": "npm run clean-dist && builder build-plugin", "serve-plugin": "builder serve-plugin", "clean-dist": "rimraf dist/*", "test": "echo \"Error: no test specified\" && exit 1" diff --git a/webapp/packages/sql-editor/package.json b/webapp/packages/sql-editor/package.json index 7d6bdd69ef..b121c87637 100644 --- a/webapp/packages/sql-editor/package.json +++ b/webapp/packages/sql-editor/package.json @@ -6,7 +6,7 @@ "main": "dist/index.js", "types": "dist/types", "scripts": { - "build-plugin": "npm run clean-dist && builder build-plugin", + "build": "npm run clean-dist && builder build-plugin", "serve-plugin": "builder serve-plugin", "clean-dist": "rimraf dist/*", "test": "echo \"Error: no test specified\" && exit 1"