micro-dev
Version:
This command line interface provides a belt full of tools that make building microservices using [micro](https://github.com/vercel/micro) a breeze! It's only meant to be used in development, **not in production** (that's where [micro](https://github.com/v
60 lines (48 loc) • 1.51 kB
JavaScript
// Ensure that the loaded files and packages have the correct env
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
// Packages
const serve = require('micro/lib');
const ip = require('ip');
const chalk = require('chalk');
const boxen = require('boxen');
// Utilities
const log = require('./log');
/**
* micro-dev for programmatic usage
*
* Usage:
*
* require('micro-dev')({ silent: false, limit: '1mb', host: '::', port: PORT })(handler)
*/
module.exports = flags => handler => {
const module = flags.silent ? handler : log(handler, flags.limit);
const server = serve(module);
const sockets = [];
server.on('connection', socket => {
const index = sockets.push(socket);
socket.once('close', () => sockets.splice(index, 1));
});
server.listen(flags.port, flags.host, err => {
if (err) {
console.error('micro:', err.stack);
process.exit(1);
}
// message
const details = server.address();
const ipAddress = ip.address();
const url = `http://${ipAddress}:${details.port}`;
let message = chalk.green('Micro is running programmatically!');
message += '\n\n';
const host = flags.host === '::' ? 'localhost' : flags.host;
const localURL = `http://${host}:${details.port}`;
message += `• ${chalk.bold('Local: ')} ${localURL}\n`;
message += `• ${chalk.bold('On Your Network: ')} ${url}\n\n`;
const box = boxen(message, {
padding: 1,
borderColor: 'green',
margin: 1
});
// Print out the message
console.log(box);
});
};