web-apps/vendor/framework7-react/build/webpack.config.js

225 lines
7 KiB
JavaScript
Raw Normal View History

2020-08-13 10:39:46 +00:00
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');
2021-03-22 08:42:10 +00:00
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
2020-08-13 10:39:46 +00:00
const TerserPlugin = require('terser-webpack-plugin');
const WorkboxPlugin = require('workbox-webpack-plugin');
const fs = require('fs')
2020-08-13 10:39:46 +00:00
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';
2021-03-11 07:18:13 +00:00
const editor = process.env.TARGET_EDITOR == 'cell' ? 'spreadsheeteditor' :
process.env.TARGET_EDITOR == 'slide' ? 'presentationeditor' : 'documenteditor';
const targetPatch = process.env.TARGET_EDITOR || 'word';
2020-08-13 10:39:46 +00:00
module.exports = {
mode: env,
entry: {
2021-03-11 07:18:13 +00:00
app: `../../apps/${editor}/mobile/src/app.js`,
2020-08-13 10:39:46 +00:00
},
output: {
2021-03-11 07:18:13 +00:00
path: resolvePath(`../../apps/${editor}/mobile`), // path above depends on it
2020-08-13 10:39:46 +00:00
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: {
2021-03-11 07:18:13 +00:00
'@': resolvePath(`../../apps/${editor}/mobile/src`),
2020-08-13 10:39:46 +00:00
},
modules: [path.resolve(__dirname, '..', 'node_modules'), 'node_modules'],
},
watch: env == 'development',
2020-08-13 10:39:46 +00:00
watchOptions: {
aggregateTimeout: 600,
poll: 1000,
},
externals: {
jquery: 'jQuery'
},
2021-06-18 10:10:18 +00:00
devtool: env === 'production' ? /*false*/'source-map' : 'source-map', // TODO: turn off debugger source map before release
2020-08-13 10:39:46 +00:00
optimization: {
minimizer: [new TerserPlugin({
})],
2021-03-22 08:42:10 +00:00
moduleIds: 'named',
2020-08-13 10:39:46 +00:00
},
module: {
rules: [
{
test: /\.(mjs|js|jsx)$/,
use: {
loader: 'babel-loader',
options: {
}
},
include: [
2021-03-11 07:18:13 +00:00
resolvePath(`../../apps/${editor}/mobile/src`),
2020-08-31 17:31:05 +00:00
resolvePath('../../apps/common/mobile/lib'),
2020-08-13 10:39:46 +00:00
resolvePath('node_modules/framework7'),
resolvePath('node_modules/framework7-react'),
resolvePath('node_modules/template7'),
resolvePath('node_modules/dom7'),
resolvePath('node_modules/ssr-window'),
resolvePath('../../../web-apps-mobile/word'),
2021-04-15 09:43:24 +00:00
resolvePath('../../../web-apps-mobile/slide'),
resolvePath('../../../web-apps-mobile/cell')
2020-08-13 10:39:46 +00:00
],
},
{
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: '../'
}
}),
2021-03-11 07:18:13 +00:00
'css-loader',
2020-08-13 10:39:46 +00:00
{
loader: 'postcss-loader',
options: {
config: {
path: path.resolve(__dirname, '..'),
}
},
},
2021-03-11 07:18:13 +00:00
{
loader: "less-loader",
options: {
lessOptions: {
javascriptEnabled: true
}
}
},
2020-08-13 10:39:46 +00:00
],
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: 'images/[name].[ext]',
2021-03-11 07:18:13 +00:00
outputPath: `../../../apps/${editor}/mobile/dist`,
2020-08-13 10:39:46 +00:00
},
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: 'fonts/[name].[ext]',
2021-03-11 07:18:13 +00:00
outputPath: `../../../apps/${editor}/mobile/dist/assets`,
2020-08-13 10:39:46 +00:00
},
},
],
},
plugins: [
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify(env),
'process.env.TARGET': JSON.stringify(target),
__PRODUCT_VERSION__: JSON.stringify(process.env.PRODUCT_VERSION ? process.env.PRODUCT_VERSION : '6.2.0d'),
__PUBLISHER_ADDRESS__: JSON.stringify('20A-12 Ernesta Birznieka-Upisha street, Riga, Latvia, EU, LV-1050'),
__SUPPORT_EMAIL__: JSON.stringify('support@onlyoffice.com'),
__PUBLISHER_PHONE__: JSON.stringify('+371 633-99867'),
__PUBLISHER_URL__: JSON.stringify('https://www.onlyoffice.com'),
__PUBLISHER_NAME__: JSON.stringify('Ascensio System SIA'),
__APP_TITLE_TEXT__: JSON.stringify(process.env.APP_TITLE_TEXT ? process.env.APP_TITLE_TEXT : 'ONLYOFFICE'),
__COMPANY_NAME__: JSON.stringify(process.env.COMPANY_NAME ? process.env.COMPANY_NAME : 'ONLYOFFICE'),
__HELP_URL__: JSON.stringify('https://helpcenter.onlyoffice.com')
2020-08-13 10:39:46 +00:00
}),
2021-05-20 16:22:13 +00:00
new webpack.BannerPlugin(`\n* Version: ${process.env.PRODUCT_VERSION} (build: ${process.env.BUILD_NUMBER})\n`),
2020-08-13 10:39:46 +00:00
...(env === 'production' ? [
2021-03-22 08:42:10 +00:00
new CssMinimizerPlugin({
minimizerOptions: {
processorOptions: {
safe: true,
map: { inline: false },
},
2020-08-13 10:39:46 +00:00
},
}),
new webpack.optimize.ModuleConcatenationPlugin(),
] : [
// Development only plugins
new webpack.HotModuleReplacementPlugin(),
2021-03-22 08:42:10 +00:00
// new webpack.NamedModulesPlugin(),
2020-08-13 10:39:46 +00:00
]),
// new CleanWebpackPlugin(),
new HtmlWebpackPlugin({
2021-03-11 07:18:13 +00:00
filename: `../../../apps/${editor}/mobile/index.html`,
2021-05-06 11:14:51 +00:00
template: `../../apps/${editor}/mobile/src/index_dev.html`,
2020-08-13 10:39:46 +00:00
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'),
},
],
}),
new webpack.NormalModuleReplacementPlugin(
/\.{2}\/lib\/patch/,
resource => fs.existsSync(`../../../web-apps-mobile/${targetPatch}/patch.jsx`) ?
resource.request = `../../../../../../web-apps-mobile/${targetPatch}/patch.jsx` : resource
),
2020-08-13 10:39:46 +00:00
],
};