UNPKG

@quasar/app-webpack

Version:

Quasar Framework App CLI with Webpack

104 lines (85 loc) 3.46 kB
const { join, basename } = require('node:path') const { createWebpackChain, extendWebpackChain, extendEsbuildConfig, createNodeEsbuildConfig } = require('../../config-tools.js') const { getBuildSystemDefine } = require('../../utils/env.js') const { injectWebpackHtml } = require('../../utils/html-template.js') async function preloadScript (quasarConf, name) { /** * We will be compiling to commonjs format because Electron requires * ESM preload scripts to run with sandbox disabled, which is a security risk * (Sandboxed preload scripts are run as plain JavaScript without an ESM context) * * However, should we decide going with ESM preload scripts at some point, * we need to change the compiled file extension to .mjs (which is also an Electron requirement) */ const scriptName = basename(name) const cfg = await createNodeEsbuildConfig(quasarConf, { compileId: `node-electron-preload-${ scriptName }`, format: 'cjs' }) const { appPaths } = quasarConf.ctx cfg.entryPoints = [ appPaths.resolve.electron(name) ] cfg.outfile = quasarConf.ctx.dev === true ? appPaths.resolve.entry(`preload/${ scriptName }.cjs`) : join(quasarConf.build.distDir, `UnPackaged/preload/${ scriptName }.cjs`) cfg.define = { ...cfg.define, ...getBuildSystemDefine({ buildEnv: { QUASAR_PUBLIC_FOLDER: quasarConf.ctx.dev === true ? appPaths.publicDir : '.' } }) } return { scriptName, esbuildConfig: await extendEsbuildConfig(cfg, quasarConf.electron, quasarConf.ctx, 'extendElectronPreloadConf') } } const quasarElectronConfig = { webpack: async quasarConf => { const { ctx } = quasarConf const webpackChain = await createWebpackChain(quasarConf, { compileId: 'webpack-electron', threadName: 'Electron UI' }) if (ctx.prod) { webpackChain.output .path( join(quasarConf.build.distDir, 'UnPackaged') ) } injectWebpackHtml(webpackChain, quasarConf) return extendWebpackChain(webpackChain, quasarConf, { isClient: true }) }, main: async quasarConf => { const cfg = await createNodeEsbuildConfig(quasarConf, { compileId: 'node-electron-main', format: 'esm' }) const { appPaths } = quasarConf.ctx cfg.entryPoints = [ quasarConf.sourceFiles.electronMain ] cfg.outfile = quasarConf.ctx.dev === true ? appPaths.resolve.entry('electron-main.js') : join(quasarConf.build.distDir, 'UnPackaged/electron-main.js') cfg.define = { ...cfg.define, ...getBuildSystemDefine({ buildEnv: quasarConf.ctx.dev === true ? { QUASAR_ELECTRON_PRELOAD_FOLDER: appPaths.resolve.entry('preload'), QUASAR_ELECTRON_PRELOAD_EXTENSION: '.cjs', QUASAR_PUBLIC_FOLDER: appPaths.publicDir } : { QUASAR_ELECTRON_PRELOAD_FOLDER: 'preload', QUASAR_ELECTRON_PRELOAD_EXTENSION: '.cjs', QUASAR_PUBLIC_FOLDER: '.' } }) } return extendEsbuildConfig(cfg, quasarConf.electron, quasarConf.ctx, 'extendElectronMainConf') }, async preloadScriptList (quasarConf) { const list = [] for (const name of quasarConf.electron.preloadScripts) { list.push( await preloadScript(quasarConf, name) ) } return list } } module.exports.quasarElectronConfig = quasarElectronConfig module.exports.modeConfig = quasarElectronConfig