@nuxt/cli-edge
Version:
105 lines (101 loc) • 2.94 kB
JavaScript
/*!
* @nuxt/cli-edge v2.18.2-28661769.e265ef3 (c) 2016-2024
* Released under the MIT License
* Repository: https://github.com/nuxt/nuxt.js
* Website: https://nuxtjs.org
*/
;
const consola = require('consola');
const chalk = require('chalk');
const opener = require('opener');
const index = require('./cli-index.js');
const banner = require('./cli-banner.js');
require('@nuxt/utils-edge');
require('@nuxt/config-edge');
require('path');
require('exit');
require('std-env');
require('wrap-ansi');
require('boxen');
require('minimist');
require('hookable');
require('defu');
require('semver');
require('fs');
require('execa');
require('pretty-bytes');
const dev = {
name: "dev",
description: "Start the application in development mode (e.g. hot-code reloading, error reporting)",
usage: "dev <dir>",
options: {
...index.common,
...index.server$1,
open: {
alias: "o",
type: "boolean",
description: "Opens the server listeners url in the default browser"
}
},
async run(cmd) {
const { argv } = cmd;
await this.startDev(cmd, argv, argv.open);
},
async startDev(cmd, argv) {
let nuxt;
try {
nuxt = await this._listenDev(cmd, argv);
} catch (error) {
consola.fatal(error);
return;
}
try {
await this._buildDev(cmd, argv, nuxt);
} catch (error) {
await nuxt.callHook("cli:buildError", error);
consola.error(error);
}
return nuxt;
},
async _listenDev(cmd, argv) {
const config = await cmd.getNuxtConfig({ dev: true, _build: true });
const nuxt = await cmd.getNuxt(config);
nuxt.hook("watch:restart", (payload) => this.onWatchRestart(payload, { nuxt, cmd, argv }));
nuxt.hook("bundler:change", (changedFileName) => this.onBundlerChange(changedFileName));
await nuxt.ready();
await nuxt.server.listen();
banner.showBanner(nuxt, false);
if (argv.open) {
argv.open = false;
const openerPromises = nuxt.server.listeners.map((listener) => opener(listener.url));
await Promise.all(openerPromises);
}
return nuxt;
},
async _buildDev(cmd, argv, nuxt) {
const builder = await cmd.getBuilder(nuxt);
await builder.build();
banner.showMemoryUsage();
for (const listener of nuxt.server.listeners) {
consola.info(chalk.bold("Listening on: ") + listener.url);
}
return nuxt;
},
logChanged({ event, path }) {
const { icon, color, action } = index.eventsMapping[event] || index.eventsMapping.change;
consola.log({
type: event,
icon: chalk[color].bold(icon),
message: `${action} ${chalk.cyan(index.formatPath(path))}`
});
},
async onWatchRestart({ event, path }, { nuxt, cmd, argv }) {
this.logChanged({ event, path });
await nuxt.close();
await this.startDev(cmd, argv);
},
onBundlerChange(path) {
this.logChanged({ event: "change", path });
}
};
exports.default = dev;