You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
session-desktop/webpack.config.js

153 lines
3.1 KiB
JavaScript

/* eslint-disable class-methods-use-this */
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const optimization = {
nodeEnv: false,
removeAvailableModules: true,
removeEmptyChunks: true,
providedExports: true,
minimize: false,
// minimizer: [new TerserPlugin({ parallel: true })],
// splitChunks: true,
};
const EXTERNAL_MODULE = new Set([
'backbone',
'better-sqlite3',
'fsevents',
'got',
'jquery',
'node-fetch',
]);
module.exports = [
{
// bundling mode
mode: 'development', // mode: 'production',
devtool: false,
optimization,
// entry files
resolve: {
extensions: ['.ts', '.tsx', '.js', '.json'],
},
entry: './ts/mains/main_node.ts',
target: 'electron-main',
module: {
// loaders
rules: [
{
test: /\.js$/,
loader: `node-bindings-loader`,
},
{
test: /\.node$/,
loader: `node-loader`,
},
{
test: /\.tsx?$/,
include: /ts/,
use: [
{
loader: 'ts-loader',
options: {
transpileOnly: true,
experimentalWatchApi: true,
},
},
],
exclude: /node_modules/,
},
],
},
// output bundles (location)
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'electron_main.js',
},
},
{
entry: './preload.ts',
mode: 'development',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'preload.bundled.js',
},
target: 'electron-main',
resolve: {
extensions: ['.ts', '.tsx', '.js', '.json'],
mainFields: ['browser', 'main'],
},
externals: [
({ request = '' }, callback) => {
if (EXTERNAL_MODULE.has(request)) {
return callback(undefined, `commonjs2 ${request}`);
}
callback();
},
],
module: {
rules: [
{
test: /\.tsx?$/,
include: [path.resolve(__dirname), path.resolve(__dirname, 'js')],
exclude: /node_modules/,
use: [
{
loader: 'ts-loader',
options: { transpileOnly: true },
},
],
},
],
},
},
{
mode: 'development',
entry: './ts/mains/main_renderer.ts',
target: 'electron-renderer',
devtool: false,
resolve: {
extensions: ['.ts', '.tsx', '.js', '.json'],
},
module: {
rules: [
{
test: /\.tsx?$/,
include: [path.resolve(__dirname, 'ts'), path.resolve(__dirname, 'js')],
exclude: /node_modules/,
use: [
{
loader: 'ts-loader',
options: {
transpileOnly: true,
experimentalWatchApi: true,
},
},
],
},
],
},
optimization,
output: {
path: path.resolve(__dirname, 'dist', 'js'),
filename: 'electron_renderer.js',
},
plugins: [
new HtmlWebpackPlugin({
template: './background.html',
}),
],
},
];