UNPKG

@varlet/cli

Version:
68 lines (67 loc) 2.75 kB
import { resolve } from 'path'; import { kebabCase } from '@varlet/shared'; import chokidar from 'chokidar'; import fse from 'fs-extra'; import { createServer } from 'vite'; import { generateEsEntryTemplate, getScriptExtname } from '../compiler/compileScript.js'; import { buildSiteEntry } from '../compiler/compileSiteEntry.js'; import { getVarletConfig } from '../config/varlet.config.js'; import { getDevConfig } from '../config/vite.config.js'; import { ES_DIR, SRC, SRC_DIR, VARLET_CONFIG } from '../shared/constant.js'; import { getPublicDirs } from '../shared/fsUtils.js'; import logger from '../shared/logger.js'; const { ensureDirSync, pathExistsSync, readFileSync, outputFileSync, removeSync } = fse; let server; let watcher; async function stub(varletConfig) { const name = kebabCase(varletConfig?.name || ''); // keep esm and css file for playground const esmFile = resolve(ES_DIR, `${name}.esm.js`); const cssFile = resolve(ES_DIR, `${name}.css`); const esmContent = pathExistsSync(esmFile) ? readFileSync(esmFile, 'utf-8') : ''; const cssContent = pathExistsSync(cssFile) ? readFileSync(cssFile, 'utf-8') : ''; removeSync(ES_DIR); const { indexTemplate } = generateEsEntryTemplate({ publicDirs: await getPublicDirs(), root: `../${SRC}/`, scriptExtname: '', }); outputFileSync(resolve(ES_DIR, `index${getScriptExtname()}`), indexTemplate); outputFileSync(resolve(ES_DIR, `style${getScriptExtname()}`), ''); outputFileSync(esmFile, esmContent); outputFileSync(cssFile, cssContent); } async function startServer(options) { const varletConfig = await getVarletConfig(); const isRestart = Boolean(server); logger.info(`${isRestart ? 'Res' : 'S'}tarting server...`); // close all instance server && (await server.close()); watcher && (await watcher.close()); // stub library index await stub(varletConfig); // build all config await buildSiteEntry(options.draft ?? false); const devConfig = getDevConfig(varletConfig); const inlineConfig = { ...devConfig, ...(options.force ? { optimizeDeps: { force: true } } : {}), }; // create all instance server = await createServer(inlineConfig); await server.listen(); server.printUrls(); if (pathExistsSync(VARLET_CONFIG)) { watcher = chokidar.watch(VARLET_CONFIG); watcher.on('change', () => startServer(options)); } logger.success(`\n${isRestart ? 'Res' : 'S'}tart successfully!!!`); if (options.draft) { logger.title('Server in draft mode!!!'); } } export async function dev(options) { process.env.NODE_ENV = 'development'; ensureDirSync(SRC_DIR); await startServer(options); }