diff options
-rw-r--r-- | .changeset/witty-colts-fix.md | 5 | ||||
-rw-r--r-- | docs/cli.md | 8 | ||||
-rw-r--r-- | packages/astro/src/cli.ts | 30 | ||||
-rw-r--r-- | packages/astro/src/dev.ts | 4 | ||||
-rw-r--r-- | packages/astro/src/reload.ts | 18 | ||||
-rw-r--r-- | packages/astro/src/runtime.ts | 2 |
6 files changed, 58 insertions, 9 deletions
diff --git a/.changeset/witty-colts-fix.md b/.changeset/witty-colts-fix.md new file mode 100644 index 000000000..0efdc57aa --- /dev/null +++ b/.changeset/witty-colts-fix.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Adds [`--verbose`](https://github.com/snowpackjs/astro/blob/main/docs/cli.md#--verbose) and [`--reload`](https://github.com/snowpackjs/astro/blob/main/docs/cli.md#--reload) flags to the `astro` CLI. diff --git a/docs/cli.md b/docs/cli.md index 2ef0592a5..213927277 100644 --- a/docs/cli.md +++ b/docs/cli.md @@ -20,6 +20,14 @@ The root is used for finding the Astro configuration file. astro --project-root examples/snowpack dev ``` +#### `--reload` + +Clears the cache (dependencies are built within Astro apps). + +#### `--verbose` + +Enables verbose logging, which is helpful when debugging an issue. + #### `--version` Print the Astro version number and exit. diff --git a/packages/astro/src/cli.ts b/packages/astro/src/cli.ts index efad9f418..894db3a66 100644 --- a/packages/astro/src/cli.ts +++ b/packages/astro/src/cli.ts @@ -9,15 +9,20 @@ import yargs from 'yargs-parser'; import { loadConfig } from './config.js'; import { build } from './build.js'; import devServer from './dev.js'; +import { reload } from './reload.js'; const { readFile } = fsPromises; const buildAndExit = async (...args: Parameters<typeof build>) => { const ret = await build(...args); process.exit(ret); }; +const reloadAndExit = async () => { + const ret = await reload(); + process.exit(ret); +}; type Arguments = yargs.Arguments; -type cliCommand = 'help' | 'version' | 'dev' | 'build'; +type cliCommand = 'help' | 'version' | 'dev' | 'build' | 'reload'; interface CLIState { cmd: cliCommand; options: { @@ -25,6 +30,7 @@ interface CLIState { sitemap?: boolean; port?: number; config?: string; + reload?: boolean; }; } @@ -50,6 +56,10 @@ function resolveArgs(flags: Arguments): CLIState { case 'build': return { cmd: 'build', options }; default: + if (flags.reload) { + return { cmd: 'reload', options }; + } + return { cmd: 'help', options }; } } @@ -66,6 +76,8 @@ function printHelp() { --config <path> Specify the path to the Astro config file. --project-root <path> Specify the path to the project root folder. --no-sitemap Disable sitemap generation (build only). + --reload Clean the cache, reinstalling dependencies. + --verbose Enable verbose logging --version Show the version number and exit. --help Show this help message. `); @@ -84,22 +96,23 @@ function mergeCLIFlags(astroConfig: AstroConfig, flags: CLIState['options']) { } /** Handle `astro run` command */ -async function runCommand(rawRoot: string, cmd: (a: AstroConfig) => Promise<void>, options: CLIState['options']) { +async function runCommand(rawRoot: string, cmd: (a: AstroConfig, options: any) => Promise<void>, options: CLIState['options']) { try { const projectRoot = options.projectRoot || rawRoot; const astroConfig = await loadConfig(projectRoot, options.config); mergeCLIFlags(astroConfig, options); - return cmd(astroConfig); + return cmd(astroConfig, options); } catch (err) { console.error(colors.red(err.toString() || err)); process.exit(1); } } -const cmdMap = new Map([ +const cmdMap = new Map<string, (a: AstroConfig, opts?: any) => Promise<void>>([ ['build', buildAndExit], ['dev', devServer], + ['reload', reloadAndExit] ]); /** The primary CLI action */ @@ -118,11 +131,20 @@ export async function cli(args: string[]) { process.exit(0); break; } + case 'reload': { + await reloadAndExit(); + break; + } case 'build': case 'dev': { + if(flags.reload) { + await reload(); + } + const cmd = cmdMap.get(state.cmd); if (!cmd) throw new Error(`Error running ${state.cmd}`); runCommand(flags._[3], cmd, state.options); + break; } } } diff --git a/packages/astro/src/dev.ts b/packages/astro/src/dev.ts index 4321adfaa..d040e9cc3 100644 --- a/packages/astro/src/dev.ts +++ b/packages/astro/src/dev.ts @@ -2,7 +2,6 @@ import 'source-map-support/register.js'; import type { AstroConfig } from './@types/astro'; import type { LogOptions } from './logger.js'; -import { logger as snowpackLogger } from 'snowpack'; import { green } from 'kleur/colors'; import http from 'http'; import path from 'path'; @@ -13,9 +12,6 @@ import { stopTimer } from './build/util'; const hostname = '127.0.0.1'; -// Disable snowpack from writing to stdout/err. -snowpackLogger.level = 'silent'; - const logging: LogOptions = { level: 'debug', dest: defaultLogDestination, diff --git a/packages/astro/src/reload.ts b/packages/astro/src/reload.ts new file mode 100644 index 000000000..a82d66c95 --- /dev/null +++ b/packages/astro/src/reload.ts @@ -0,0 +1,18 @@ +import type { LogOptions } from './logger'; +import { clearCache } from 'snowpack'; +import { defaultLogDestination, debug, error, info, parseError } from './logger.js'; + +const logging: LogOptions = { + level: 'debug', + dest: defaultLogDestination, +}; + +export async function reload() { + try { + info(logging, 'reload', `Clearing the cache...`); + await clearCache(); + return 0; + } catch { + return 1; + } +}
\ No newline at end of file diff --git a/packages/astro/src/runtime.ts b/packages/astro/src/runtime.ts index 931837910..86a816556 100644 --- a/packages/astro/src/runtime.ts +++ b/packages/astro/src/runtime.ts @@ -45,7 +45,7 @@ type LoadResultError = { statusCode: 500 } & ({ type: 'parse-error'; error: Comp export type LoadResult = (LoadResultSuccess | LoadResultNotFound | LoadResultRedirect | LoadResultError) & { collectionInfo?: CollectionInfo }; // Disable snowpack from writing to stdout/err. -snowpackLogger.level = 'silent'; +snowpackLogger.level = process.argv.includes('--verbose') ? 'debug' : 'silent'; /** Pass a URL to Astro to resolve and build */ async function load(config: RuntimeConfig, rawPathname: string | undefined): Promise<LoadResult> { |