diff --git a/webapp/configs/webpack.product.config.js b/webapp/configs/webpack.product.config.js index a822104567..7cd6760ee0 100644 --- a/webapp/configs/webpack.product.config.js +++ b/webapp/configs/webpack.product.config.js @@ -1,53 +1,15 @@ const merge = require('webpack-merge'); const webpack = require('webpack'); -const fs = require('fs'); -const { resolve, join } = require('path'); -const commonConfig = require('./webpack.config.js'); +const { resolve } = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const CopyWebpackPlugin = require('copy-webpack-plugin'); +const commonConfig = require('./webpack.config.js'); +const getAssets = require('./webpack.product.utils'); var main = resolve('src/index.ts'); var outputDir = resolve('lib'); var package = require(resolve("package.json")) -function getCloudbeaverDeps(package) { - if (!package.dependencies) { - return []; - } - - return Object.keys(package.dependencies) - .filter(dependency => /@cloudbeaver\/(.*?)/.test(dependency)) -} - -function scanCloudbeaverDeps() { - const deps = new Set(); - const list = getCloudbeaverDeps(package); - - while (list.length) { - const dependency = list.shift(); - - if (!deps.has(dependency)) { - list.push(...getCloudbeaverDeps(require(join(__dirname, '../node_modules', dependency, 'package.json')))) - } - - deps.add(dependency); - } - - return Array.from(deps.keys()) -} - -function getAssets(to) { - const patterns = scanCloudbeaverDeps() - .map(dependency => ({ from: join(__dirname, '../node_modules', dependency, 'public'), to, force: true })) - .reverse(); - - patterns.push({ from: './public', to, force: true }); - - return patterns.filter(pattern => fs.existsSync(pattern.from)) -} - -scanCloudbeaverDeps() - module.exports = (env, argv) => merge(commonConfig(env, argv), { entry: main, output: { @@ -69,7 +31,7 @@ module.exports = (env, argv) => merge(commonConfig(env, argv), { }, plugins: [ new CopyWebpackPlugin({ - patterns: getAssets('') + patterns: getAssets(package, '') }), new webpack.DefinePlugin({ version: JSON.stringify(package.buildVersion), diff --git a/webapp/configs/webpack.product.dev.config.js b/webapp/configs/webpack.product.dev.config.js index 7141d79823..862b3f5af8 100644 --- a/webapp/configs/webpack.product.dev.config.js +++ b/webapp/configs/webpack.product.dev.config.js @@ -4,9 +4,10 @@ const { resolve } = require('path'); const commonConfig = require('./webpack.config.js'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const CopyWebpackPlugin = require('copy-webpack-plugin'); +const getAssets = require('./webpack.product.utils'); const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; -var packageJson = require(resolve("package.json")) +var package = require(resolve("package.json")) module.exports = (env, argv) => merge(commonConfig(env, argv), { entry: [ @@ -24,12 +25,10 @@ module.exports = (env, argv) => merge(commonConfig(env, argv), { devtool: 'cheap-module-eval-source-map', plugins: [ new CopyWebpackPlugin({ - patterns: [ - { from: './public', to: '', force: true }, - ] + patterns: getAssets(package, '') }), new webpack.DefinePlugin({ - version: JSON.stringify(packageJson.buildVersion), + version: JSON.stringify(package.buildVersion), }), new HtmlWebpackPlugin({ template: resolve('src/index.html.ejs'), }), new webpack.HotModuleReplacementPlugin(), // enable HMR globally diff --git a/webapp/configs/webpack.product.utils.js b/webapp/configs/webpack.product.utils.js new file mode 100644 index 0000000000..579c08ee27 --- /dev/null +++ b/webapp/configs/webpack.product.utils.js @@ -0,0 +1,38 @@ +const fs = require('fs'); +const { join } = require('path'); + +function getCloudbeaverDeps(package) { + if (!package.dependencies) { + return []; + } + + return Object.keys(package.dependencies) + .filter(dependency => /@cloudbeaver\/(.*?)/.test(dependency)) +} + +function scanCloudbeaverDeps(package) { + const deps = new Set(); + const list = getCloudbeaverDeps(package); + + while (list.length) { + const dependency = list.shift(); + + if (!deps.has(dependency)) { + list.push(...getCloudbeaverDeps(require(join(__dirname, '../node_modules', dependency, 'package.json')))) + } + + deps.add(dependency); + } + + return Array.from(deps.keys()) +} + +module.exports = function getAssets(package, to) { + const patterns = scanCloudbeaverDeps(package) + .map(dependency => ({ from: join(__dirname, '../node_modules', dependency, 'public'), to, force: true })) + .reverse(); + + patterns.push({ from: './public', to, force: true }); + + return patterns.filter(pattern => fs.existsSync(pattern.from)) +} \ No newline at end of file