UNPKG

@quasar/app-webpack

Version:

Quasar Framework App CLI with Webpack

69 lines (56 loc) 2.31 kB
const { join } = require('node:path') const fse = require('fs-extra') const archiver = require('archiver') const { AppBuilder } = require('../../app-builder.js') const { progress, warn } = require('../../utils/logger.js') const { quasarBexConfig } = require('./bex-config.js') const { createManifest, copyBexAssets } = require('./bex-utils.js') module.exports.QuasarModeBuilder = class QuasarModeBuilder extends AppBuilder { async build () { const webpackConf = await quasarBexConfig.webpack(this.quasarConf) await this.buildWithWebpack('BEX UI', webpackConf) const { err, scriptList } = createManifest(this.quasarConf) if (err !== void 0) process.exit(1) for (const entry of scriptList) { const contentConfig = await quasarBexConfig.bexScript(this.quasarConf, entry) await this.buildWithEsbuild(`Bex Script (${ entry.name })`, contentConfig) } copyBexAssets(this.quasarConf) this.printSummary(this.quasarConf.build.distDir) await this.#bundlePackage(this.quasarConf.build.distDir) } async #bundlePackage (dir) { const done = progress('Bundling in progress...') const zipName = `Packaged.${ this.ctx.pkg.appPkg.name }.zip` const file = join(dir, zipName) const output = fse.createWriteStream(file) const archive = archiver('zip', { zlib: { level: 9 } // Sets the compression level. }) archive.pipe(output) archive.directory(dir, false, entryData => ((entryData.name !== zipName) ? entryData : false)) return new Promise((resolve, reject) => { archive.on('warning', (error) => { /* It could be any of the following: - stat failures (e.g. ENOENT) - symlink/directory not supported by module (e.g. zip), but it is supported, so it won't happen - given file is not a file/directory/symlink, but something else (e.g. socket) */ if (error instanceof archiver.ArchiverError && error.code === 'ENTRYNOTSUPPORTED') { warn(error) } else { reject(error) archive.abort() } }) archive.on('error', error => reject(error)) output.on('close', () => { done(`Bundle has been generated at: ${ file }`) resolve() }) archive.finalize() }) } }