diff --git a/vendor/framework7-react/build/build.js b/vendor/framework7-react/build/build.js index 8a8cfa5c8..313b92dd9 100644 --- a/vendor/framework7-react/build/build.js +++ b/vendor/framework7-react/build/build.js @@ -2,16 +2,15 @@ const webpack = require('webpack'); const ora = require('ora'); const rm = require('rimraf'); const chalk = require('chalk'); -const config = require('./webpack.config.js'); +const config = process.env.BUILD_EDITOR == 'slide' ? require('./webpack.config.pe.js') : require('./webpack.config.js'); const env = process.env.NODE_ENV || 'development'; const target = process.env.TARGET || 'web'; -const isCordova = target === 'cordova' const spinner = ora(env === 'production' ? 'building for production...' : 'building development version...'); spinner.start(); -rm(isCordova ? './cordova/www' : './www/', (removeErr) => { +rm('./www/', (removeErr) => { if (removeErr) throw removeErr; webpack(config, (err, stats) => { diff --git a/vendor/framework7-react/build/webpack.config.pe.js b/vendor/framework7-react/build/webpack.config.pe.js new file mode 100644 index 000000000..93176b33e --- /dev/null +++ b/vendor/framework7-react/build/webpack.config.pe.js @@ -0,0 +1,201 @@ +const webpack = require('webpack'); +const CopyWebpackPlugin = require('copy-webpack-plugin'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const { CleanWebpackPlugin } = require('clean-webpack-plugin'); + +const MiniCssExtractPlugin = require('mini-css-extract-plugin'); +const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin'); +const TerserPlugin = require('terser-webpack-plugin'); +const WorkboxPlugin = require('workbox-webpack-plugin'); + +const path = require('path'); + +function resolvePath(dir) { + return path.join(__dirname, '..', dir); +} + +const env = process.env.NODE_ENV || 'development'; +const target = process.env.TARGET || 'web'; + +module.exports = { + mode: env, + entry: { + app: '../../apps/presentationeditor/mobile/src/app.js', + }, + output: { + path: resolvePath('../../apps/presentationeditor/mobile'), // path above depends on it + filename: 'dist/js/[name].js', // in such form will be injected in index.html + chunkFilename: 'dist/js/[name].js', + publicPath: '', + hotUpdateChunkFilename: 'hot/hot-update.js', + hotUpdateMainFilename: 'hot/hot-update.json', + }, + resolve: { + extensions: ['.js', '.jsx', '.json'], + alias: { + '@': resolvePath('../../apps/presentationeditor/mobile/src'), + }, + modules: [path.resolve(__dirname, '..', 'node_modules'), 'node_modules'], + }, + watch: true, + watchOptions: { + aggregateTimeout: 600, + poll: 1000, + }, + externals: { + jquery: 'jQuery' + }, + + devtool: env === 'production' ? 'source-map' : 'source-map', + optimization: { + minimizer: [new TerserPlugin({ + sourceMap: true, + })], + }, + module: { + rules: [ + { + test: /\.(mjs|js|jsx)$/, + use: { + loader: 'babel-loader', + options: { + + } + }, + include: [ + resolvePath('../../apps/presentationeditor/mobile/src'), + resolvePath('../../apps/common/mobile/lib'), + resolvePath('node_modules/framework7'), + + resolvePath('node_modules/framework7-react'), + + resolvePath('node_modules/template7'), + resolvePath('node_modules/dom7'), + resolvePath('node_modules/ssr-window'), + ], + }, + + + + { + test: /\.css$/, + use: [ + (env === 'development' ? 'style-loader' : { + loader: MiniCssExtractPlugin.loader, + options: { + publicPath: '../' + } + }), + 'css-loader', + { + loader: 'postcss-loader', + options: { + config: { + path: path.resolve(__dirname, '..'), + } + }, + }, + ], + }, + { + test: /\.less$/, + use: [ + (env === 'development' ? 'style-loader' : { + loader: MiniCssExtractPlugin.loader, + options: { + publicPath: '../' + } + }), + 'css-loader', + { + loader: "less-loader", + options: { + lessOptions: { + javascriptEnabled: true + } + } + }, + { + loader: 'postcss-loader', + options: { + config: { + path: path.resolve(__dirname, '..'), + } + }, + }, + ], + }, + { + test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, + loader: 'url-loader', + options: { + limit: 10000, + name: 'images/[name].[ext]', + outputPath: '../../../apps/presentationeditor/mobile/dist', + + }, + }, + { + test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, + loader: 'url-loader', + options: { + limit: 10000, + name: 'fonts/[name].[ext]', + outputPath: '../../../apps/presentationeditor/mobile/dist/assets', + + }, + }, + ], + }, + plugins: [ + new webpack.DefinePlugin({ + 'process.env.NODE_ENV': JSON.stringify(env), + 'process.env.TARGET': JSON.stringify(target), + }), + + ...(env === 'production' ? [ + new OptimizeCSSPlugin({ + cssProcessorOptions: { + safe: true, + map: { inline: false }, + }, + }), + new webpack.optimize.ModuleConcatenationPlugin(), + ] : [ + // Development only plugins + new webpack.HotModuleReplacementPlugin(), + new webpack.NamedModulesPlugin(), + ]), + // new CleanWebpackPlugin(), + new HtmlWebpackPlugin({ + filename: '../../../apps/presentationeditor/mobile/index.html', + template: '../../apps/presentationeditor/mobile/src/index_dev.html', + inject: true, + minify: env === 'production' ? { + collapseWhitespace: true, + removeComments: true, + removeRedundantAttributes: true, + removeScriptTypeAttributes: true, + removeStyleLinkTypeAttributes: true, + useShortDoctype: true + } : false, + }), + new MiniCssExtractPlugin({ + filename: 'css/[name].css', + }), + new CopyWebpackPlugin({ + patterns: [ + { + noErrorOnMissing: true, + from: resolvePath('src/static'), + to: resolvePath('www/static'), + }, + { + noErrorOnMissing: true, + from: resolvePath('src/manifest.json'), + to: resolvePath('www/manifest.json'), + }, + ], + }), + ], +}; \ No newline at end of file diff --git a/vendor/framework7-react/package.json b/vendor/framework7-react/package.json index cb224222d..78879278f 100644 --- a/vendor/framework7-react/package.json +++ b/vendor/framework7-react/package.json @@ -10,7 +10,9 @@ "dev": "cross-env NODE_ENV=development webpack-dev-server --config ./build/webpack.config.js", "build-dev": "cross-env NODE_ENV=development node ./build/build.js", "build-prod": "cross-env NODE_ENV=production node ./build/build.js", - "postinstall": "cpy ./node_modules/framework7-icons/fonts/*.* ./src/fonts/" + "postinstall": "cpy ./node_modules/framework7-icons/fonts/*.* ./src/fonts/", + "build-word": "cross-env NODE_ENV=development node ./build/build.js", + "build-slide": "cross-env NODE_ENV=development BUILD_EDITOR=slide node ./build/build.js" }, "browserslist": [ "Android >= 7",