Skip to content

Commit 0d70453

Browse files
committed
add support for custom Vue modes
1 parent c8b7ed4 commit 0d70453

File tree

3 files changed

+68
-12
lines changed

3 files changed

+68
-12
lines changed

__tests__/commands.spec.js

Lines changed: 51 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,26 @@ describe('build:electron', () => {
170170
'projectPath/dist_electron/bundled/css/fonts'
171171
)
172172
})
173+
174+
test('--mode argument takes precedence over other options', async () => {
175+
await runCommand(
176+
'build:electron',
177+
{ pluginOptions: { electronBuilder: { buildMode: 'production' } } },
178+
{ headless: true, mode: 'development' }
179+
)
180+
181+
// Development mode is used
182+
expect(buildRenderer.mock.calls[0][0].mode).toBe('development')
183+
})
184+
185+
test('buildMode sets Vue mode if provided', async () => {
186+
await runCommand('build:electron', {
187+
pluginOptions: { electronBuilder: { buildMode: 'development' } }
188+
})
189+
190+
// Development mode is used
191+
expect(buildRenderer.mock.calls[0][0].mode).toBe('development')
192+
})
173193
})
174194

175195
describe('serve:electron', () => {
@@ -269,21 +289,40 @@ describe('serve:electron', () => {
269289
// Electron is not launched
270290
expect(execa).not.toBeCalled()
271291
})
272-
test('If --healdess argument is passed, serve:electron is launched in production mode', async () => {
273-
await runCommand('serve:electron', {}, { headless: true })
292+
test('If --headless argument is passed, serve:electron is launched in production mode', async () => {
293+
await runCommand(
294+
'serve:electron',
295+
{
296+
// It should take precedence over plugin options
297+
pluginOptions: { electronBuilder: { serveMode: 'production' } }
298+
},
299+
{ headless: true }
300+
)
274301

275302
// Production mode is used
276303
expect(serve.mock.calls[0][0].mode).toBe('production')
277304
// Electron is not launched
278305
expect(execa).not.toBeCalled()
279306
})
280-
test('If --forceDev argument is passed, serve:electron is launched in dev mode', async () => {
281-
await runCommand('serve:electron', {}, { headless: true, forceDev: true })
282307

283-
// Production mode is used
308+
test('--mode argument takes precedence over other options', async () => {
309+
await runCommand(
310+
'serve:electron',
311+
{ pluginOptions: { electronBuilder: { serveMode: 'production' } } },
312+
{ headless: true, mode: 'development' }
313+
)
314+
315+
// Development mode is used
284316
expect(serve.mock.calls[0][0].mode).toBe('development')
285-
// Electron is not launched
286-
expect(execa).not.toBeCalled()
317+
})
318+
319+
test('serveMode sets Vue mode if provided', async () => {
320+
await runCommand('serve:electron', {
321+
pluginOptions: { electronBuilder: { serveMode: 'production' } }
322+
})
323+
324+
// Development mode is used
325+
expect(serve.mock.calls[0][0].mode).toBe('production')
287326
})
288327
})
289328

@@ -349,7 +388,11 @@ describe('testWithSpectron', async () => {
349388
})
350389
test('launches dev server in dev mode if forceDev argument is provided', async () => {
351390
await runSpectron({ forceDev: true })
352-
expect(execa.mock.calls[0][1]).toContain('--forceDev')
391+
392+
// Mode argument was set to development
393+
expect(
394+
execa.mock.calls[0][1].join(' ').indexOf('--mode development')
395+
).not.toBe(-1)
353396
})
354397
test('returns stdout of command', async () => {
355398
const { stdout } = await runSpectron({}, { customLog: 'shouldBeInLog' })

index.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ module.exports = (api, options) => {
3636
const buildRenderer = require('@vue/cli-service/lib/commands/build').build
3737
const fs = require('fs-extra')
3838
const builder = require('electron-builder')
39+
const mode = args.mode || pluginOptions.buildMode
3940
const yargs = require('yargs')
4041
// Import the yargs options from electron-builder
4142
const configureBuildCommand = require('electron-builder/out/builder')
@@ -76,7 +77,9 @@ module.exports = (api, options) => {
7677
// Make sure files are outputted to proper directory
7778
dest: outputDir + '/bundled',
7879
// Enable modern mode
79-
modern: true
80+
modern: true,
81+
// Apply mode if provided
82+
...(mode ? { mode } : {})
8083
}
8184
const mainConfig = new Config()
8285
// Configure main process webpack config
@@ -191,6 +194,12 @@ module.exports = (api, options) => {
191194
args => {
192195
const execa = require('execa')
193196
const serve = require('@vue/cli-service/lib/commands/serve').serve
197+
// --mode > headless > pluginOptions > defaults
198+
const mode =
199+
args.mode ||
200+
(args.headless ? 'production' : null) ||
201+
pluginOptions.serveMode
202+
console.log(mode)
194203
const rendererConfig = api.resolveChainableWebpackConfig()
195204
// Configure renderer process to work properly with electron
196205
rendererConfig
@@ -248,8 +257,8 @@ module.exports = (api, options) => {
248257
_: [],
249258
// Use dashboard if called from ui
250259
dashboard: args.dashboard,
251-
// Serve in development mode if launched in headless mode
252-
mode: args.headless && !args.forceDev ? 'production' : 'development'
260+
// Apply mode if provided
261+
...(mode ? { mode } : {})
253262
},
254263
api,
255264
options,

lib/testWithSpectron.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,11 @@ module.exports = (options = {}) =>
1313
// Launch serve:electron in headless mode
1414
const child = execa(
1515
require.resolve('@vue/cli-service/bin/vue-cli-service'),
16-
['serve:electron', '--headless', options.forceDev ? '--forceDev' : 'true']
16+
[
17+
'serve:electron',
18+
'--headless',
19+
...(options.forceDev ? ['--mode', 'development'] : [])
20+
]
1721
)
1822
// Exit if serve:electron throws an error
1923
child.on('error', err => {

0 commit comments

Comments
 (0)