Files
standardnotes-app-web/packages/desktop/desktop.webpack.common.js
2022-06-09 18:01:00 -05:00

147 lines
3.7 KiB
JavaScript

const env = process.env.NODE_ENV ?? 'production'
require('dotenv').config({
path: `.env.${env}`,
})
const path = require('path')
const CopyPlugin = require('copy-webpack-plugin')
const webpack = require('webpack')
const { DefinePlugin } = require('webpack')
const TerserPlugin = require('terser-webpack-plugin')
module.exports = function ({ onlyTranspileTypescript = false, experimentalFeatures = false, snap = false } = {}) {
const moduleConfig = {
rules: [
{
test: /\.ts$/,
use: [
'babel-loader',
{
loader: 'ts-loader',
options: {
transpileOnly: onlyTranspileTypescript,
},
},
],
},
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader',
},
{
sideEffects: true,
test: /\.(png|html)$/i,
loader: 'file-loader',
options: {
name: '[name].[ext]',
},
},
],
}
const resolve = {
extensions: ['.ts', '.js'],
alias: {
'@web': path.resolve(__dirname, '../web/src/javascripts'),
},
}
const EXPERIMENTAL_FEATURES = JSON.stringify(experimentalFeatures)
const IS_SNAP = JSON.stringify(snap ? true : false)
const electronMainConfig = {
entry: {
index: './app/index.ts',
},
output: {
path: path.resolve(__dirname, 'app', 'dist'),
filename: 'index.js',
},
devtool: 'inline-cheap-source-map',
target: 'electron-main',
node: {
__dirname: false,
},
resolve,
module: moduleConfig,
externals: {
keytar: 'commonjs keytar',
},
optimization: {
minimizer: [
new TerserPlugin({
exclude: ['web', 'node_modules'],
}),
],
},
plugins: [
new DefinePlugin({
EXPERIMENTAL_FEATURES,
IS_SNAP,
}),
new CopyPlugin({
patterns: [
{
from: '../web/dist',
to: 'web',
},
{
from: '../../node_modules/@standardnotes/components/dist/',
to: 'web/components',
},
{
from: 'app/node_modules',
to: 'node_modules',
globOptions: {
ignore: ['**/standard-notes/**'],
},
},
{
from: 'app/stylesheets/renderer.css',
to: 'stylesheets/renderer.css',
},
{
from: 'app/icon',
to: 'icon',
},
],
}),
],
}
const electronRendererConfig = {
entry: {
preload: './app/javascripts/Renderer/Preload.ts',
renderer: './app/javascripts/Renderer/Renderer.ts',
grantLinuxPasswordsAccess: './app/javascripts/Renderer/grantLinuxPasswordsAccess.js',
},
output: {
path: path.resolve(__dirname, 'app', 'dist', 'javascripts', 'renderer'),
publicPath: '/',
},
target: 'electron-renderer',
devtool: 'inline-cheap-source-map',
node: {
__dirname: false,
},
resolve,
module: moduleConfig,
externals: {
electron: 'commonjs electron',
},
plugins: [
new webpack.DefinePlugin({
DEFAULT_SYNC_SERVER: JSON.stringify(process.env.DEFAULT_SYNC_SERVER || 'https://api.standardnotes.com'),
PURCHASE_URL: JSON.stringify(process.env.PURCHASE_URL),
PLANS_URL: JSON.stringify(process.env.PLANS_URL),
DASHBOARD_URL: JSON.stringify(process.env.DASHBOARD_URL),
EXPERIMENTAL_FEATURES,
WEBSOCKET_URL: JSON.stringify(process.env.WEBSOCKET_URL),
ENABLE_UNFINISHED_FEATURES: JSON.stringify(process.env.ENABLE_UNFINISHED_FEATURES),
}),
],
}
return [electronMainConfig, electronRendererConfig]
}