diff options
Diffstat (limited to 'electron/service/commands')
| -rw-r--r-- | electron/service/commands/build-main.js | 41 | ||||
| -rw-r--r-- | electron/service/commands/build.js | 44 | ||||
| -rw-r--r-- | electron/service/commands/dev.js | 102 |
3 files changed, 187 insertions, 0 deletions
diff --git a/electron/service/commands/build-main.js b/electron/service/commands/build-main.js new file mode 100644 index 00000000..1b28ef91 --- /dev/null +++ b/electron/service/commands/build-main.js @@ -0,0 +1,41 @@ +'use strict' + +const loadEnv = require('../utils/loadEnv') +loadEnv() +loadEnv('production') + +const rm = require('rimraf') +const webpack = require('webpack') + +const { error, done } = require('../utils/logger') +const { logWithSpinner, stopSpinner } = require('../utils/spinner') +const paths = require('../utils/paths') +// after renderer is built, main is next to build +const webpackConfig = require('../config/main') +const config = require('../project.config') + +logWithSpinner('Building for production...') +// removed rm function to prevent the deletion of renderer +webpack(webpackConfig, (err, stats) => { + stopSpinner(false) + + if (err) throw err + + process.stdout.write( + stats.toString({ + colors: true, + modules: false, + children: false, + chunks: false, + chunkModules: false, + }) + '\n\n' + ) + + if (stats.hasErrors()) { + error('Build failed with errors.\n') + process.exit(1) + } + + done('Build complete.\n') +}) + diff --git a/electron/service/commands/build.js b/electron/service/commands/build.js new file mode 100644 index 00000000..097f7013 --- /dev/null +++ b/electron/service/commands/build.js @@ -0,0 +1,44 @@ +'use strict' + +const loadEnv = require('../utils/loadEnv') +loadEnv() +loadEnv('production') + +const rm = require('rimraf') +const webpack = require('webpack') + +const { error, done } = require('../utils/logger') +const { logWithSpinner, stopSpinner } = require('../utils/spinner') +const paths = require('../utils/paths') +// build renderer first +const webpackConfig = require('../config/renderer') +const config = require('../project.config') + +logWithSpinner('Building for production...') + +rm(paths.resolve(config.outputDir), (err) => { + if (err) throw err + + webpack(webpackConfig, (err, stats) => { + stopSpinner(false) + + if (err) throw err + + process.stdout.write( + stats.toString({ + colors: true, + modules: false, + children: false, + chunks: false, + chunkModules: false, + }) + '\n\n' + ) + + if (stats.hasErrors()) { + error('Build failed with errors.\n') + process.exit(1) + } + + done('Build complete.\n') + }) +}) diff --git a/electron/service/commands/dev.js b/electron/service/commands/dev.js new file mode 100644 index 00000000..bea42021 --- /dev/null +++ b/electron/service/commands/dev.js @@ -0,0 +1,102 @@ +'use strict' + +const loadEnv = require('../utils/loadEnv') +loadEnv() +loadEnv('development') +const chalk = require('chalk') +const webpack = require('webpack') +const WebpackDevServer = require('webpack-dev-server') +const { info } = require('../utils/logger') +const getLocalIP = require('../utils/getLocalIP') +const devWebpackConfig = require('../config/dev') +const devServerOptions = devWebpackConfig.devServer +const { spawn } = require('node:child_process') +const electron = require('electron') +const path = require('path') +const url = require('url') +const fs = require('fs'); + +let electronProcess = null +let manualRestart = false +// disable warnings in browser console +process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'false' + +const protocol = devServerOptions.https ? 'https' : 'http' +const host = devServerOptions.host || '0.0.0.0' +const port = devServerOptions.port || 8080 + +// older code that sets the url for the path I would assume +var parseArg = process.argv[2] || "" +var yarnArg = url.parse(parseArg) + +function resetPort() { + let resetData = { "_comment1": "port should not be declared when commiting" } + fs.writeFileSync(path.join(__dirname, "../../src/lib/flaskserverport.json"), JSON.stringify(resetData), 'utf8') + console.log("Resetting the flaskport") +} + +function startElectron(webpackport) { +var wbport = webpackport + // this sends url to proper position + process.argv.shift() + process.argv.shift() + // get URL from PrintPDF + // checks if url is http + if (yarnArg.protocol) { + var args = [ + '--inspect=5858', + path.join(__dirname, '../../dist/electron/main.js') + ].concat(process.argv) + } else { + var args = [ + '--inspect=5858', + `http://0.0.0.0:${wbport}/#${process.argv}` + ].concat(process.argv) + } + // detect yarn or npm and process commandline args accordingly + if (process.env.npm_execpath.endsWith('yarn.js')) { + args = args.concat(process.argv.slice(3)) + } else if (process.env.npm_execpath.endsWith('npm-cli.js')) { + args = args.concat(process.argv.slice(2)) + } + electronProcess = spawn(electron, args) + electronProcess.on('close', () => { + if (!manualRestart) { + process.exit() + } else { + process.kill(electronProcess.pid) + } + resetPort() + }) + electronProcess.on('exit', () => { + resetPort() + }) +} + +info('Starting development server...') +const compiler = webpack(devWebpackConfig) +const server = new WebpackDevServer(devServerOptions, compiler) + +compiler.hooks.done.tap('serve', (stats) => { + console.log() + console.log() + console.log(`App running at:`) + console.log(` - Local: ${chalk.cyan(`${protocol}://${host}:${port}`)}`) + console.log(` - Network: ${chalk.cyan(`${protocol}://${getLocalIP()}:${port}`)}`) + console.log() + + // allows livereload for webpack devserver to work without multiple instances of electron + if (electronProcess) { + manualRestart = true + } else { + manualRestart = false + // starts nodejs electron commandline browser + startElectron(devServerOptions.port) + } +}) + +server.start(port, host, (err) => { + if (err) { + process.exit(0) + } +}) |
