fchat-rising/electron/webpack.config.js

271 lines
9.5 KiB
JavaScript
Raw Permalink Normal View History

2021-01-24 00:52:27 +00:00
const _ = require('lodash');
2017-09-02 01:50:31 +00:00
const path = require('path');
const fs = require('fs');
2019-01-03 17:38:17 +00:00
const ForkTsCheckerWebpackPlugin = require('@f-list/fork-ts-checker-webpack-plugin');
const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin');
2018-07-20 01:12:26 +00:00
const VueLoaderPlugin = require('vue-loader/lib/plugin');
2019-01-03 17:38:17 +00:00
const vueTransformer = require('@f-list/vue-ts/transform').default;
2020-03-15 18:17:36 +00:00
const CopyPlugin = require('copy-webpack-plugin');
2017-09-02 01:50:31 +00:00
2018-01-06 16:14:21 +00:00
const mainConfig = {
2018-08-10 16:59:37 +00:00
entry: [path.join(__dirname, 'main.ts'), path.join(__dirname, 'package.json')],
2018-01-06 16:14:21 +00:00
output: {
path: __dirname + '/app',
2021-09-11 02:20:31 +00:00
filename: 'main.js'
2018-01-06 16:14:21 +00:00
},
context: __dirname,
target: 'electron-main',
module: {
rules: [
2018-01-06 16:14:21 +00:00
{
test: /\.ts$/,
loader: 'ts-loader',
options: {
configFile: __dirname + '/tsconfig-main.json',
2018-01-06 16:14:21 +00:00
transpileOnly: true
}
},
2024-07-07 00:45:46 +00:00
{test: path.join(__dirname, 'package.json'), loader: 'file-loader', options: {name: 'package.json'}, type: 'javascript/auto'},
2021-12-23 22:59:09 +00:00
{test: /\.(png|ico|html)$/, loader: 'file-loader', options: {name: '[name].[ext]'}},
2020-04-05 18:29:43 +00:00
{test: /\.raw\.js$/, loader: 'raw-loader'}
2018-01-06 16:14:21 +00:00
]
},
node: {
__dirname: false,
__filename: false
},
plugins: [
new ForkTsCheckerWebpackPlugin({
async: false,
tslint: path.join(__dirname, '../tslint.json'),
2024-07-07 00:30:34 +00:00
tsconfig: './tsconfig-main.json',
ignoreLintWarnings: true,
})
2018-01-06 16:14:21 +00:00
],
resolve: {
extensions: ['.ts', '.js']
2024-07-07 01:40:29 +00:00
},
optimization: {
2024-07-07 01:42:06 +00:00
minimize: false,
2024-07-07 01:51:00 +00:00
moduleIds: 'named',
chunkIds: 'named',
2024-07-07 01:40:29 +00:00
},
}, rendererConfig = {
2017-09-02 01:50:31 +00:00
entry: {
2018-01-06 16:14:21 +00:00
chat: [path.join(__dirname, 'chat.ts'), path.join(__dirname, 'index.html')],
window: [path.join(__dirname, 'window.ts'), path.join(__dirname, 'window.html'), path.join(__dirname, 'build', 'tray@2x.png')],
browser_option: [path.join(__dirname, 'browser_option.ts'), path.join(__dirname, 'browser_option.html'), path.join(__dirname, 'build', 'tray@2x.png')]
2017-09-02 01:50:31 +00:00
},
output: {
path: __dirname + '/app',
2020-10-24 20:47:50 +00:00
publicPath: './',
2017-09-02 01:50:31 +00:00
filename: '[name].js'
},
context: __dirname,
2018-01-06 16:14:21 +00:00
target: 'electron-renderer',
2017-09-02 01:50:31 +00:00
module: {
rules: [
2017-09-02 01:50:31 +00:00
{
test: /\.vue$/,
loader: 'vue-loader',
options: {
2018-07-20 01:12:26 +00:00
compilerOptions: {
preserveWhitespace: false
}
2017-09-02 01:50:31 +00:00
}
},
{
test: /\.ts$/,
loader: 'ts-loader',
options: {
appendTsSuffixTo: [/\.vue$/],
configFile: __dirname + '/tsconfig-renderer.json',
2019-01-03 17:38:17 +00:00
transpileOnly: true,
getCustomTransformers: () => ({before: [vueTransformer]})
2017-09-02 01:50:31 +00:00
}
},
{test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, loader: 'file-loader'},
2018-03-28 13:51:05 +00:00
{test: /\.(woff2?)$/, loader: 'file-loader'},
{test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, loader: 'file-loader'},
{test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, loader: 'file-loader'},
2020-10-24 20:47:50 +00:00
{test: /\.(wav|mp3|ogg)$/, loader: 'file-loader', options: {name: 'sounds/[name].[ext]'}},
2021-12-23 22:59:09 +00:00
{test: /\.(png|ico|html)$/, loader: 'file-loader', options: {name: '[name].[ext]'}},
2020-10-24 20:47:50 +00:00
{
test: /\.vue\.scss/,
// loader: ['vue-style-loader', {loader: 'css-loader', options: {esModule: false}},'sass-loader']
use: [
'vue-style-loader',
{loader: 'css-loader', options: {esModule: false}},
2024-07-07 00:30:34 +00:00
{loader: 'sass-loader', options: {warnRuleAsWarning: false}},
2020-10-24 20:47:50 +00:00
]
},
{
test: /\.vue\.css/,
// loader: ['vue-style-loader', {loader: 'css-loader', options: {esModule: false}}]
use: [
'vue-style-loader',
{loader: 'css-loader', options: {esModule: false}}
]
},
2020-04-05 18:29:43 +00:00
{test: /\.raw\.js$/, loader: 'raw-loader'}
2017-09-02 01:50:31 +00:00
]
},
node: {
__dirname: false,
__filename: false
},
plugins: [
new ForkTsCheckerWebpackPlugin({
async: false,
tslint: path.join(__dirname, '../tslint.json'),
tsconfig: './tsconfig-renderer.json',
2024-07-07 00:30:34 +00:00
vue: true,
ignoreLintWarnings: true,
2018-07-20 01:12:26 +00:00
}),
2020-03-15 18:17:36 +00:00
new VueLoaderPlugin(),
new CopyPlugin(
2020-06-29 22:01:06 +00:00
{
patterns: [
{
2020-06-29 22:12:51 +00:00
from: path.resolve(__dirname, '..', 'chat', 'preview', 'assets', '**', '*').replace(/\\/g, '/'),
2020-06-29 22:01:06 +00:00
to: path.join('preview', 'assets'),
context: path.resolve(__dirname, '..', 'chat', 'preview', 'assets')
2020-10-31 21:25:28 +00:00
},
{
2024-07-07 03:27:01 +00:00
from: path.resolve(__dirname, '..', 'node_modules', '@cliqz', 'adblocker-electron-preload', 'dist', 'preload.cjs.js').replace(/\\/g, '/'),
2024-07-06 23:20:26 +00:00
to: path.join('preview', 'assets', 'adblocker', 'preload.cjs.js'),
toType: 'file',
2020-10-31 21:25:28 +00:00
context: path.resolve(__dirname, '..', 'node_modules', '@cliqz', 'adblocker-electron-preload', 'dist')
2021-01-20 20:22:22 +00:00
},
2021-12-23 22:59:09 +00:00
{
2024-07-07 03:27:01 +00:00
from: path.resolve(__dirname, '..', 'node_modules', '@cliqz', 'adblocker-electron-preload', 'dist', 'preload.es6.js').replace(/\\/g, '/'),
2024-07-07 01:00:40 +00:00
to: path.join('preview', 'assets', 'adblocker', 'preload.js'),
toType: 'file',
2021-12-23 22:59:09 +00:00
context: path.resolve(__dirname, '..', 'node_modules', '@cliqz', 'adblocker-electron-preload', 'dist')
},
2021-01-20 20:22:22 +00:00
{
from: path.resolve(__dirname, '..', 'assets', '**', '*').replace(/\\/g, '/'),
to: path.join('assets'),
context: path.resolve(__dirname, '..', 'assets')
2020-06-29 22:01:06 +00:00
}
]
}
2020-03-15 18:17:36 +00:00
)
2017-09-02 01:50:31 +00:00
],
resolve: {
extensions: ['.ts', '.js', '.vue', '.css'],
2020-10-24 20:47:50 +00:00
// alias: {qs: 'querystring'}
2017-09-02 01:50:31 +00:00
},
optimization: {
2024-07-07 01:40:29 +00:00
splitChunks: {chunks: 'all', minChunks: 2, name: 'common'},
2024-07-07 01:42:06 +00:00
minimize: false,
2024-07-07 01:51:00 +00:00
moduleIds: 'named',
chunkIds: 'named',
2017-09-02 01:50:31 +00:00
}
};
2021-01-24 00:52:27 +00:00
const storeWorkerEndpointConfig = _.assign(
_.cloneDeep(mainConfig),
{
entry: [path.join(__dirname, '..', 'learn', 'store', 'worker', 'store.worker.endpoint.ts')],
output: {
path: __dirname + '/app',
filename: 'storeWorkerEndpoint.js',
globalObject: 'this'
},
2021-09-11 01:59:05 +00:00
2021-01-24 00:52:27 +00:00
target: 'electron-renderer',
2021-09-11 01:59:05 +00:00
node: {
global: true,
},
2021-01-24 00:52:27 +00:00
module: {
rules: [
{
test: /\.ts$/,
loader: 'ts-loader',
options: {
configFile: __dirname + '/tsconfig-renderer.json',
transpileOnly: true,
getCustomTransformers: () => ({before: [vueTransformer]})
}
},
]
},
2024-07-07 01:40:29 +00:00
optimization: {
2024-07-07 01:42:06 +00:00
minimize: false,
2024-07-07 01:51:00 +00:00
moduleIds: 'named',
chunkIds: 'named',
2024-07-07 01:40:29 +00:00
},
2021-01-24 00:52:27 +00:00
plugins: [
new ForkTsCheckerWebpackPlugin({
async: false,
tslint: path.join(__dirname, '../tslint.json'),
tsconfig: './tsconfig-renderer.json',
2024-07-07 00:30:34 +00:00
vue: true,
ignoreLintWarnings: true,
2021-01-24 00:52:27 +00:00
})
]
}
);
module.exports = function(mode) {
const themesDir = path.join(__dirname, '../scss/themes/chat');
2017-09-02 01:50:31 +00:00
const themes = fs.readdirSync(themesDir);
for(const theme of themes) {
if(!theme.endsWith('.scss')) continue;
2017-09-02 01:50:31 +00:00
const absPath = path.join(themesDir, theme);
2018-01-06 16:14:21 +00:00
rendererConfig.entry.chat.push(absPath);
2020-10-24 20:47:50 +00:00
rendererConfig.module.rules.unshift(
{
test: absPath,
use: [
{loader: 'file-loader', options: {name: 'themes/[name].css'}},
'extract-loader',
{loader: 'css-loader', options: {esModule: false}},
2024-07-07 00:30:34 +00:00
{loader: 'sass-loader', options: {warnRuleAsWarning: false}},
2020-10-24 20:47:50 +00:00
]
}
);
2017-09-02 01:50:31 +00:00
}
2020-10-24 20:47:50 +00:00
const faPath = path.join(themesDir, '../../fa.scss');
rendererConfig.entry.chat.push(faPath);
2020-10-24 20:47:50 +00:00
rendererConfig.module.rules.unshift(
{
test: faPath,
use: [
{loader: 'file-loader', options: {name: 'fa.css'}},
'extract-loader',
{loader: 'css-loader', options: {esModule: false}},
2024-07-07 00:30:34 +00:00
{loader: 'sass-loader', options: {warnRuleAsWarning: false}},
2020-10-24 20:47:50 +00:00
]
}
);
if(mode === 'production') {
2018-03-28 13:51:05 +00:00
process.env.NODE_ENV = 'production';
2024-07-07 00:30:34 +00:00
mainConfig.devtool = 'inline-source-map';
rendererConfig.devtool = 'inline-source-map';
storeWorkerEndpointConfig.devtool = 'inline-source-map';
rendererConfig.plugins.push(new OptimizeCssAssetsPlugin());
2017-09-02 01:50:31 +00:00
} else {
2020-06-20 18:43:34 +00:00
// mainConfig.devtool = rendererConfig.devtool = 'none';
mainConfig.devtool = 'inline-source-map';
rendererConfig.devtool = 'inline-source-map';
2021-01-24 00:52:27 +00:00
storeWorkerEndpointConfig.devtool = 'inline-source-map';
2017-09-02 01:50:31 +00:00
}
2020-10-24 20:47:50 +00:00
2024-07-07 00:30:34 +00:00
return [storeWorkerEndpointConfig, mainConfig, rendererConfig];
2020-03-15 18:17:36 +00:00
};