gohugoio/hugo · error

unsupported target

Error message

unsupported target: %v

What it means

Thrown when the Target slice is non-empty but none of its values match either a known ES language version (es5, esnext, etc.) nor any known engine prefix. The result is a wholly unrecognized target list.

Solutions

  1. Use only supported values: es5, es6/es2015, es2016 through es2024, esnext, or <engine><version> (e.g. chrome80).

Example fix

// before
{{ $opts := dict "targets" (slice "modern") }}

// after
{{ $opts := dict "targets" (slice "es2020") }}
Defensive patterns

Strategy: validation

Validate before calling

allowed := map[string]bool{"es5": true, "es6": true, "es2015": true, "es2016": true, "es2017": true, "es2018": true, "es2019": true, "es2020": true, "es2021": true, "es2022": true, "es2023": true, "es2024": true, "esnext": true, "": true}
engineRe := regexp.MustCompile(`^(chrome|deno|edge|firefox|hermes|ie|ios|node|opera|rhino|safari)\d+$`)
for _, t := range opts.Target {
    if !allowed[t] && !engineRe.MatchString(t) {
        return fmt.Errorf("unsupported target: %q", t)
    }
}

Prevention

When it happens

Trigger: Setting Target to ["web"], ["modern"], or any string not present in nameTarget and not starting with a known engine name.

Common situations: User invents target names like "modern" or "legacy"; typo like es2200; expects case-variants (DecodeExternalOptions lowercases Target, but a value with no lowercase mapping like "MODERN" still won't resolve).

Related errors


AI-assisted analysis of gohugoio/hugo@52c9bd7908 (2026-08-09). Data as JSON: /api/errors/234df0970d37ce85. Report an issue: GitHub.

Appendix: source

Thrown at internal/js/esbuild/options.go:296

	var engines []api.Engine

OUTER:
	for _, value := range opts.Target {
		for _, engine := range engineKeysSorted {
			if strings.HasPrefix(value, engine) {
				version := value[len(engine):]
				if version == "" {
					return fmt.Errorf("invalid engine version: %q", value)
				}
				engines = append(engines, api.Engine{Name: engineName[engine], Version: version})
				continue OUTER
			}
		}
	}

	if target == 0 && len(engines) == 0 && len(opts.Target) > 0 {
		return fmt.Errorf("unsupported target: %v", opts.Target)
	}

	if target == 0 {
		target = api.ESNext
	}

	var loaders map[string]api.Loader
	if opts.IsCSS {
		loaders = make(map[string]api.Loader)
		// Add default CSS file loaders.
		// May be overridden by opts.Loaders.
		maps.Copy(loaders, extensionToLoaderMapCSS)
	}
	if opts.Loaders != nil {
		if loaders == nil {
			loaders = make(map[string]api.Loader)
		}

View on GitHub (pinned to 52c9bd7908)