BabylonJS/Babylon.js · error · Error

loadFileInjection is not defined

Error message

loadFileInjection is not defined

What it means

Loading shader files (.fx) requires a file-loading function to be injected into the core (normally done by importing the side-effect module of the engine/file loader, e.g. @babylonjs/core/Materials/Textures/loadFile or the engine's injection). If _loadFileInjection is still unset, LoadShader throws instead of silently failing.

Source

Thrown at packages/dev/core/src/Materials/effect.functions.ts:273

        return;
    }

    if (optionalKey && shaderStore[shader + optionalKey + "Shader"]) {
        callback(shaderStore[shader + optionalKey + "Shader"]);
        return;
    }

    let shaderUrl;

    if (shader[0] === "." || shader[0] === "/" || shader.indexOf("http") > -1) {
        shaderUrl = shader;
    } else {
        shaderUrl = ShaderStore.GetShadersRepository(shaderLanguage) + shader;
    }
    _loadFileInjection = _loadFileInjection || _LoadFile;
    if (!_loadFileInjection) {
        // we got to this point and loadFile was not injected - throw an error
        throw new Error("loadFileInjection is not defined");
    }
    // Vertex shader
    _loadFileInjection(shaderUrl + "." + key.toLowerCase() + ".fx", callback);
}

function UseFinalCode(migratedVertexCode: string, migratedFragmentCode: string, baseName: any, shaderLanguage?: ShaderLanguage) {
    if (baseName) {
        const vertex = baseName.vertexElement || baseName.vertex || baseName.spectorName || baseName;
        const fragment = baseName.fragmentElement || baseName.fragment || baseName.spectorName || baseName;

        return {
            vertexSourceCode: (shaderLanguage === ShaderLanguage.WGSL ? "//" : "") + "#define SHADER_NAME vertex:" + vertex + "\n" + migratedVertexCode,
            fragmentSourceCode: (shaderLanguage === ShaderLanguage.WGSL ? "//" : "") + "#define SHADER_NAME fragment:" + fragment + "\n" + migratedFragmentCode,
        };
    } else {
        return {
            vertexSourceCode: migratedVertexCode,
            fragmentSourceCode: migratedFragmentCode,

View on GitHub (pinned to 0592b347b8)

Solutions

  1. Import the file-loading side-effect: import "@babylonjs/core/Materials/Textures/loadFile"; (or the full engine entry) before creating shaders.
  2. Alternatively inject manually: import { LoadFile } from ...; and set the injection (e.g. via the module that sets _loadFileInjection).
  3. If you don't need file loading, use inline shader code (shaderStore / Effect.ShadersStore) instead of .fx URLs.
  4. Audit your imports against the ES6 migration guide to ensure all needed side-effect modules are present.

Example fix

// before
import { ShaderMaterial } from "@babylonjs/core/Materials/shaderMaterial";
// after
import { ShaderMaterial } from "@babylonjs/core/Materials/shaderMaterial";
import "@babylonjs/core/Materials/Textures/loadFile"; // registers the loadFile injection
Defensive patterns

Strategy: try-catch

Validate before calling

// Ensure the file-loader side effect is imported before shader creation
import "@babylonjs/core/Materials/Textures/loadFile";
// or verify at runtime:
if (!ShaderStore.ShadersRepository) {
  console.warn("Shader repository/file loader not registered");
}

Try / catch

try {
  const shader = new ShaderMaterial("m", scene, "./myShader", {});
} catch (e) {
  if (String(e.message).includes("loadFileInjection is not defined")) {
    console.error("Import the loadFile side-effect module in your ES6 entry point.");
  }
}

Prevention

When it happens

Trigger: Calling LoadShader (via _ProcessShaderCode / ShaderMaterial / Effect creation) in a tree-shaken ES6 setup where no LoadFile injection module was imported, so no file loader is registered.

Common situations: Using @babylonjs/core ES6 packages with tree shaking and forgetting to import side-effect modules, switching from the UMD bundle (auto-injected) to modular imports, custom DI setups that cleared injections.

Related errors


AI-assisted analysis of BabylonJS/Babylon.js@0592b347b8 (2026-08-30). Data as JSON: /api/errors/521ccf8ff742e484. Report an issue: GitHub.