UNPKG

@livelybone/vue-table

Version:

A vue table component, support width change

78 lines (70 loc) 2.06 kB
/* eslint-disable import/no-extraneous-dependencies, no-console */ const chokidar = require('chokidar') const spawn = require('cross-spawn') const chalk = require('chalk') const { promiseOnPending, singletonObj } = require('@livelybone/singleton') const express = require('express') const path = require('path') const port = process.env.PORT || 3000 const watcher = chokidar.watch('src') function serve() { return singletonObj( 'serve', () => new Promise(res => { const app = express() app.use('/examples', express.static(path.resolve('./examples'))) app.use('/lib', express.static(path.resolve('./lib'))) app.listen(port, e => { if (e) { console.log(chalk.red(e)) process.exit(1) } res() }) }), ).then(() => { console.log( `\r\nThe example of your component is listening on ${port}...\r\n`, ) console.log( chalk.cyan( ` Open http://127.0.0.1:${port}/examples/test.html in your browser`, ), '\r\n', ) }) } function spawnConsole(resource, ls, res, rej) { ls.stdout.on('data', data => { console.log(`${data}`.replace(/[\r\n]/g, '')) }) ls.stderr.on('data', data => { console.log(`${data}`.replace(/[\r\n]/g, '')) }) ls.on('close', code => { if (+code === 0) { res() console.log('\r') console.log(chalk.cyan(`>>> ${resource} building successful`), '\r\n') serve() } else rej() }) } function build(cmd = 'build:js') { return promiseOnPending( () => { const resource = cmd.replace('build:', '') console.log(chalk.cyan(`>>> Building for ${resource}...`), '\r\n') return new Promise( spawnConsole.bind(null, resource, spawn('npm', ['run', cmd])), ) }, { id: cmd, delayTime: 1000 }, ) } watcher.on('all', (event, filename) => { const isCss = /.s?css$/ if (isCss.test(filename)) build('build:css') else build() })