UNPKG

4.58 kBPlain TextView Raw
1#!/usr/bin/env node
2
3const parseArgs = require('minimist')
4
5const argv = parseArgs(process.argv.slice(2), {
6 alias: {
7 t: 'theme',
8 m: 'mode',
9 T: 'target',
10 A: 'arch',
11 b: 'bundler',
12 d: 'debug',
13 h: 'help'
14 },
15 boolean: ['h', 'd'],
16 string: ['t', 'm', 'T'],
17 default: {
18 t: 'mat',
19 m: 'spa'
20 }
21})
22
23if (argv.help) {
24 console.log(`
25 Description
26 Builds distributables of your app.
27 Usage
28 $ quasar build -p <port number>
29 Options
30 --theme, -t App theme (default: mat)
31 --mode, -m App mode [spa|ssr|pwa|cordova|electron] (default: spa)
32 --target, -T App target
33 - Cordova (default: all installed)
34 [android|ios|blackberry10|browser|osx|ubuntu|webos|windows]
35 - Electron with default "electron-packager" bundler (default: yours)
36 [darwin|win32|linux|mas|all]
37 - Electron with "electron-builder" bundler (default: yours)
38 [darwin|mac|win32|win|linux|all]
39 --debug, -d Build for debugging purposes
40 --help, -h Displays this message
41
42 ONLY for Electron mode:
43 --bundler, -b Bundler (electron-packager or electron-builder)
44 [packager|builder]
45 --arch, -A App architecture (default: yours)
46 - with default "electron-packager" bundler:
47 [ia32|x64|armv7l|arm64|mips64el|all]
48 - with "electron-builder" bundler:
49 [ia32|x64|armv7l|arm64|all]
50 `)
51 process.exit(0)
52}
53
54const chalk = require('chalk')
55
56const
57 logger = require('../lib/helpers/logger')
58 log = logger('app:build')
59 warn = logger('app:build', 'red'),
60 banner = require('../lib/helpers/banner')
61
62require('../lib/helpers/ensure-argv')(argv, 'build')
63banner(argv, 'build')
64
65if (argv.mode !== 'spa') {
66 require('../lib/mode/install-missing')(argv.mode, argv.target)
67}
68
69const
70 path = require('path'),
71 webpack = require('webpack')
72
73const
74 appPaths = require('../lib/app-paths'),
75 QuasarConfig = require('../lib/quasar-config'),
76 Generator = require('../lib/generator'),
77 artifacts = require('../lib/artifacts'),
78 ensureDeps = require('../lib/helpers/ensure-deps')
79
80function parseWebpackConfig (webpackConfig, mode) {
81 if (mode === 'ssr') {
82 return [ webpackConfig.server, webpackConfig.client ]
83 }
84 if (mode === 'electron') {
85 return [ webpackConfig.renderer, webpackConfig.main ]
86 }
87 return webpackConfig
88}
89
90function finalize (mode, quasarConfig) {
91 if (mode === 'cordova') {
92 return require('../lib/cordova').build(quasarConfig)
93 }
94 if (mode === 'electron') {
95 return require('../lib/electron').build(quasarConfig)
96 }
97
98 return Promise.resolve()
99}
100
101async function build () {
102 const quasarConfig = new QuasarConfig({
103 theme: argv.theme,
104 mode: argv.mode,
105 target: argv.target,
106 arch: argv.arch,
107 bundler: argv.bundler,
108 debug: argv.debug,
109 prod: true
110 })
111
112 try {
113 await quasarConfig.prepare()
114 }
115 catch (e) {
116 console.log(e)
117 warn(`⚠️ [FAIL] quasar.conf.js has JS errors`)
118 process.exit(1)
119 }
120
121 quasarConfig.compile()
122
123 const
124 generator = new Generator(quasarConfig),
125 webpackConfig = quasarConfig.getWebpackConfig(),
126 buildConfig = quasarConfig.getBuildConfig(),
127 mode = argv.mode.toUpperCase(),
128 outputFolder = buildConfig.build.packagedElectronDist || buildConfig.build.distDir
129
130 artifacts.clean(outputFolder)
131 generator.prepare()
132 generator.build()
133
134 log(chalk.bold(`Building...`))
135
136 webpack(parseWebpackConfig(webpackConfig, argv.mode), (err, stats) => {
137 if (err) { throw err }
138
139 artifacts.add(outputFolder)
140
141 statsArray = stats.stats || [ stats ]
142 statsArray.forEach(stat => {
143 process.stdout.write('\n\n' + stat.toString({
144 colors: true,
145 performance: false,
146 hash: false,
147 assets: true,
148 chunks: false,
149 chunkModules: false,
150 chunkOrigins: false,
151 modules: false,
152 nestedModules: false,
153 moduleAssets: false,
154 children: false
155 }) + '\n\n')
156 })
157
158 statsArray.forEach(stat => {
159 if (stat.hasErrors()) {
160 warn()
161 warn(chalk.red('[FAIL] Build failed with errors. Check log above.'))
162 warn()
163
164 process.exit(1)
165 }
166 })
167
168 finalize(argv.mode, quasarConfig).then(() => {
169 banner(argv, 'build', {
170 outputFolder: argv.mode === 'cordova'
171 ? path.join(outputFolder, '..')
172 : outputFolder
173 })
174 })
175 })
176}
177
178ensureDeps()
179build()