mirror of
https://github.com/vbenjs/vue-vben-admin.git
synced 2025-01-24 02:00:25 +08:00
60 lines
1.4 KiB
TypeScript
60 lines
1.4 KiB
TypeScript
import chalk from 'chalk';
|
|
import Koa from 'koa';
|
|
import inquirer from 'inquirer';
|
|
import staticServer from 'koa-static';
|
|
import portfinder from 'portfinder';
|
|
import { resolve } from 'path';
|
|
import viteConfig from '../../vite.config';
|
|
import { getIPAddress } from '../utils';
|
|
import { runBuild } from './build';
|
|
|
|
const BUILD = 1;
|
|
const NO_BUILD = 2;
|
|
|
|
// start server
|
|
const startApp = () => {
|
|
const port = 9680;
|
|
portfinder.basePort = port;
|
|
const app = new Koa();
|
|
|
|
app.use(staticServer(resolve(process.cwd(), viteConfig.outDir || 'dist')));
|
|
|
|
portfinder.getPort(async (err, port) => {
|
|
if (err) {
|
|
throw err;
|
|
} else {
|
|
app.listen(port, function () {
|
|
const empty = ' ';
|
|
const common = `The preview program is already running:
|
|
- LOCAL: http://localhost:${port}/
|
|
- NETWORK: http://${getIPAddress()}:${port}/
|
|
`;
|
|
console.log(chalk.cyan('\n' + empty + common));
|
|
});
|
|
}
|
|
});
|
|
};
|
|
|
|
export const runPreview = async () => {
|
|
const prompt = inquirer.prompt({
|
|
type: 'list',
|
|
message: 'Please select a preview method',
|
|
name: 'type',
|
|
choices: [
|
|
{
|
|
name: 'Preview after packaging',
|
|
value: BUILD,
|
|
},
|
|
{
|
|
name: `No packaging, preview directly (need to have dist file after packaging)`,
|
|
value: NO_BUILD,
|
|
},
|
|
],
|
|
});
|
|
const { type } = await prompt;
|
|
if (type === BUILD) {
|
|
runBuild();
|
|
}
|
|
startApp();
|
|
};
|