UNPKG

3.39 kBJavaScriptView Raw
1/*!
2 * @nuxt/cli v2.12.0 (c) 2016-2020
3
4 * - All the amazing contributors
5 * Released under the MIT License.
6 * Website: https://nuxtjs.org
7*/
8'use strict';
9
10function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
11
12const index = require('./cli-index.js');
13require('path');
14require('@nuxt/config');
15require('exit');
16require('@nuxt/utils');
17const chalk = _interopDefault(require('chalk'));
18require('std-env');
19require('wrap-ansi');
20require('boxen');
21const consola = _interopDefault(require('consola'));
22require('minimist');
23require('hable');
24require('fs');
25require('execa');
26require('pretty-bytes');
27const banner = require('./cli-banner.js');
28const opener = _interopDefault(require('opener'));
29
30const dev = {
31 name: 'dev',
32 description: 'Start the application in development mode (e.g. hot-code reloading, error reporting)',
33 usage: 'dev <dir>',
34 options: {
35 ...index.common,
36 ...index.server,
37 open: {
38 alias: 'o',
39 type: 'boolean',
40 description: 'Opens the server listeners url in the default browser'
41 }
42 },
43
44 async run (cmd) {
45 const { argv } = cmd;
46
47 await this.startDev(cmd, argv, argv.open);
48 },
49
50 async startDev (cmd, argv) {
51 let nuxt;
52 try {
53 nuxt = await this._listenDev(cmd, argv);
54 } catch (error) {
55 consola.fatal(error);
56 return
57 }
58
59 try {
60 await this._buildDev(cmd, argv, nuxt);
61 } catch (error) {
62 await nuxt.callHook('cli:buildError', error);
63 consola.error(error);
64 }
65
66 return nuxt
67 },
68
69 async _listenDev (cmd, argv) {
70 const config = await cmd.getNuxtConfig({ dev: true, _build: true });
71 const nuxt = await cmd.getNuxt(config);
72
73 // Setup hooks
74 nuxt.hook('watch:restart', payload => this.onWatchRestart(payload, { nuxt, cmd, argv }));
75 nuxt.hook('bundler:change', changedFileName => this.onBundlerChange(changedFileName));
76
77 // Wait for nuxt to be ready
78 await nuxt.ready();
79
80 // Start listening
81 await nuxt.server.listen();
82
83 // Show banner when listening
84 banner.showBanner(nuxt, false);
85
86 // Opens the server listeners url in the default browser (only once)
87 if (argv.open) {
88 argv.open = false;
89 const openerPromises = nuxt.server.listeners.map(listener => opener(listener.url));
90 await Promise.all(openerPromises);
91 }
92
93 // Return instance
94 return nuxt
95 },
96
97 async _buildDev (cmd, argv, nuxt) {
98 // Create builder instance
99 const builder = await cmd.getBuilder(nuxt);
100
101 // Start Build
102 await builder.build();
103
104 // Print memory usage
105 banner.showMemoryUsage();
106
107 // Display server urls after the build
108 for (const listener of nuxt.server.listeners) {
109 consola.info(chalk.bold('Listening on: ') + listener.url);
110 }
111
112 // Return instance
113 return nuxt
114 },
115
116 logChanged ({ event, path }) {
117 const { icon, color, action } = index.eventsMapping[event] || index.eventsMapping.change;
118
119 consola.log({
120 type: event,
121 icon: chalk[color].bold(icon),
122 message: `${action} ${chalk.cyan(index.formatPath(path))}`
123 });
124 },
125
126 async onWatchRestart ({ event, path }, { nuxt, cmd, argv }) {
127 this.logChanged({ event, path });
128
129 await nuxt.close();
130
131 await this.startDev(cmd, argv);
132 },
133
134 onBundlerChange (path) {
135 this.logChanged({ event: 'change', path });
136 }
137};
138
139exports.default = dev;