UNPKG

@quasar/app-webpack

Version:

Quasar Framework App CLI with Webpack

76 lines (63 loc) 2.34 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) } #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() }) } }