marktext/.electron-vue/webpack.main.config.js
Felix Häusler 1cc2d4e3ca
Update build tools (#2814)
* Update build tools (babel, eslint and webpack)

* Fix karma configuration (unit tests)

* Fix invalid glob path on Windows

* Fix codemirror editor modes location for development

* Break welcome text on smaller terminals

* Fix ESLint error and reduce PlantUML compression level
2022-01-02 18:48:38 +08:00

113 lines
2.5 KiB
JavaScript

'use strict'
process.env.BABEL_ENV = 'main'
const path = require('path')
const webpack = require('webpack')
const ESLintPlugin = require('eslint-webpack-plugin')
const { getEnvironmentDefinitions } = require('./marktextEnvironment')
const { dependencies } = require('../package.json')
const isProduction = process.env.NODE_ENV === 'production'
/** @type {import('webpack').Configuration} */
const mainConfig = {
mode: 'development',
devtool: 'eval-cheap-module-source-map',
optimization: {
emitOnErrors: false
},
entry: {
main: path.join(__dirname, '../src/main/index.js')
},
externals: [
...Object.keys(dependencies || {})
],
module: {
rules: [
{
test: /\.js$/,
use: 'babel-loader',
exclude: /node_modules/
},
{
test: /\.node$/,
loader: 'node-loader',
options: {
name: '[name].[ext]'
}
}
]
},
node: {
__dirname: !isProduction,
__filename: !isProduction
},
cache: false,
output: {
filename: '[name].js',
libraryTarget: 'commonjs2',
path: path.join(__dirname, '../dist/electron')
},
plugins: [
new ESLintPlugin({
extensions: ['js'],
files: [
'src',
'test'
],
exclude: [
'node_modules'
],
emitError: true,
failOnError: true,
// NB: Threads must be disabled, otherwise no errors are emitted.
threads: false,
formatter: require('eslint-friendly-formatter'),
context: path.resolve(__dirname, '../'),
overrideConfigFile: '.eslintrc.js'
}),
// Add global environment definitions.
new webpack.DefinePlugin(getEnvironmentDefinitions())
],
resolve: {
alias: {
'common': path.join(__dirname, '../src/common')
},
extensions: ['.js', '.json', '.node']
},
target: 'electron-main'
}
// Fix debugger breakpoints
if (!isProduction && process.env.MARKTEXT_BUILD_VSCODE_DEBUG) {
mainConfig.devtool = 'inline-source-map'
}
/**
* Adjust mainConfig for development settings
*/
if (!isProduction) {
mainConfig.cache = {
name: 'main-dev',
type: 'filesystem'
}
mainConfig.plugins.push(
new webpack.DefinePlugin({
'__static': `"${path.join(__dirname, '../static').replace(/\\/g, '\\\\')}"`
})
)
}
/**
* Adjust mainConfig for production settings
*/
if (isProduction) {
mainConfig.devtool = 'nosources-source-map'
mainConfig.mode = 'production'
mainConfig.optimization.minimize = true
}
module.exports = mainConfig