grafana/k6 · error

the module %q was not previously resolved during initializat

Error message

the module %q was not previously resolved during initialization (__VU==0)

What it means

initializeGoModule was asked to instantiate a Go (builtin/extension) module after the resolver was locked — i.e. outside the initialization phase (__VU==0). The generic sentinel notPreviouslyResolvedModule fires when the module name was never pre-resolved and cached during init, typically because the import happens in handleSetup or another late lifecycle hook.

Source

Thrown at js/modules/resolution.go:75

		compiler:  c,
		reverse:   make(map[any]*url.URL),
		base:      base,
		usage:     u,
		logger:    logger,
	}
}

func (mr *ModuleResolver) resolveSpecifier(basePWD *url.URL, arg string) (*url.URL, error) {
	specifier, err := loader.Resolve(basePWD, arg)
	if err != nil {
		return nil, err
	}
	return specifier, nil
}

func (mr *ModuleResolver) initializeGoModule(name string) (sobek.ModuleRecord, error) {
	if mr.locked {
		return nil, fmt.Errorf(notPreviouslyResolvedModule, name)
	}
	mod, ok := mr.goModules[name]
	if !ok {
		mr.unknownModules = append(mr.unknownModules, name)
		return &unknownModule{name: name, requested: make(map[string]struct{})}, nil
	}
	// We would have hit the cache if this isn't the first time, so each distinct
	// module is recorded once. An extension is identified by membership in the
	// extension registry, not by its k6/x/ name: its resolved registry entry is
	// recorded under "extensions" so the report needs no re-resolution, while
	// built-in modules stay in the "modules" bucket.
	if e, ok := ext.Get(ext.JSExtension)[name]; ok {
		if err := mr.usage.Values("extensions", e); err != nil {
			mr.logger.WithError(err).Warnf("Error while reporting usage of extension %q", name)
		}
	} else if err := mr.usage.Strings("modules", name); err != nil {
		mr.logger.WithError(err).Warnf("Error while reporting usage of module %q", name)
	}

View on GitHub (pinned to 01ffac6f24)

Solutions

  1. Move the import of the Go module to the top of the init context (top-level import statement) so it resolves while __VU==0
  2. Use require() inside setup only for modules already imported at the top level
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at js/modules/resolution.go:75 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of grafana/k6@01ffac6f24 (2026-08-18). Data as JSON: /api/errors/5f08fbfdceedd5c7. Report an issue: GitHub.