handler: async()

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();
  }