const { chalk, clipboardy, address } = require('@umijs/utils'); class DevCompileDonePlugin { constructor(opts) { this.opts = opts; } apply(compiler) { let isFirstCompile = true; compiler.hooks.done.tap('DevFirstCompileDone', stats => { if (stats.hasErrors()) { // make sound if (process.env.SYSTEM_BELL !== 'none') { process.stdout.write('\x07'); } return; } if (isFirstCompile) { const lanIp = address.ip(); const protocol = this.opts.https ? 'https' : 'http'; const hostname = this.opts.hostname === '0.0.0.0' ? 'localhost' : this.opts.hostname; const localUrl = `${protocol}://${hostname}:${this.opts.port}`; const lanUrl = `${protocol}://${lanIp}:${this.opts.port}`; let copied = ''; try { clipboardy.writeSync(localUrl); copied = chalk.dim('(copied to clipboard)'); } catch (e) { copied = chalk.red(`(copy to clipboard failed)`); } console.log( [ ` App running at:`, ` - Local: ${chalk.cyan(localUrl)} ${copied}`, lanUrl && ` - Network: ${chalk.cyan(lanUrl)}`, ] .filter(Boolean) .join('\n'), ); process.send && process.send({ type: 'DONE', }); isFirstCompile = false; } // this.opts.onCompileDone && this.opts.onCompileDone({ // isFirstCompile, // stats, // }); if (isFirstCompile) { isFirstCompile = false; // process.send({ // type: 'DONE' // }) } }); } } module.exports = DevCompileDonePlugin;