in src/commands/dev/index.ts [62:180]
handler: async (argv: ArgumentsCamelCase) => {
let { port, inspectPort } = argv;
let userFileRepacking = false; // flag of user code repack not .dev file change
const { entry, minify, refreshCommand, localUpstream, help } = argv;
if (yargsIns && help) {
yargsIns.showHelp('log');
return;
}
const projectConfig = getProjectConfig();
if (!projectConfig) {
if (entry) {
try {
await selectToCreateConf(entry as string);
} catch (_) {
logger.notInProject();
process.exit(1);
}
} else {
return logger.notInProject();
}
} else if (entry) {
// @ts-ignore
global.entry = entry;
}
if (port) {
if (Array.isArray(port)) {
port = Number(port[0]);
} else {
port = Number(port);
if (isNaN(port as number)) {
logger.warn(
t('dev_import_port_invalid').d(
'Invalid port entered, default port will be used.'
)
);
}
}
// @ts-ignore
global.port = port;
}
if (inspectPort) {
inspectPort = Number(inspectPort);
// @ts-ignore
global.inspectPort = inspectPort;
}
if (minify) {
// @ts-ignore
global.minify = minify;
}
if (minify) {
// @ts-ignore
global.minify = minify;
}
if (localUpstream) {
// @ts-ignore
global.localUpstream = localUpstream;
}
const runtimeCommand = await preCheckRuntime();
if (!runtimeCommand) {
return;
}
const speDenoPort = getDevConf('port', 'dev', 18080);
const speInspectPort = getDevConf('inspectPort', 'dev', 9229);
try {
const result = await checkAndInputPort(speDenoPort, speInspectPort);
// @ts-ignore
global.port = result.denoPort;
// @ts-ignore
global.inspectPort = result.inspectPort;
} catch (err) {
process.exit(1);
}
logger.info(`${t('dev_build_start').d('Starting build process')}...`);
await devPack();
const worker = new WorkerServer({ command: runtimeCommand });
const ignored = (path: string) => {
return /(^|[\/\\])\.(?!dev($|[\/\\]))/.test(path);
};
const watcher = chokidar.watch([`${getRoot()}/src`, `${getRoot()}/.dev`], {
ignored,
persistent: true
});
watcher.on(
'change',
debounce(async (path: string) => {
if (path.includes('.dev')) {
if (userFileRepacking) {
userFileRepacking = false;
return;
}
worker.restart();
return;
}
logger.info(
`${t('dev_repacking').d('Detected local file changes, re-packaging')}...`
);
if (refreshCommand) {
try {
await execRefreshCommand(refreshCommand as string);
} catch (err) {}
}
userFileRepacking = true;
await devPack();
await worker.restart();
}, 500)
);
const { devElement } = doProcess(worker);
const { waitUntilExit } = devElement;
await waitUntilExit();
watcher.close();
}