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
- Import the file-loading side-effect: import "@babylonjs/core/Materials/Textures/loadFile"; (or the full engine entry) before creating shaders.
- Alternatively inject manually: import { LoadFile } from ...; and set the injection (e.g. via the module that sets _loadFileInjection).
- If you don't need file loading, use inline shader code (shaderStore / Effect.ShadersStore) instead of .fx URLs.
- 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
- In tree-shaken ES6 projects, import all needed side-effect modules listed in the ES6 migration guide.
- Keep a single app entry that imports the Babylon.js engine + loaders once.
- Prefer inline ShaderStore shaders when no file loading is desired.
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
- Function not injected yet. Use the factory to create the plu
- No plugin or fallback for ${pluginExtension ?? fileInfo.url}
- The loader plugin corresponding to the '${pluginExtension}'
- The ComputeShaderParticleSystem class is not available! Make
- The WebGL2ParticleSystem class is not available! Make sure y
AI-assisted analysis of BabylonJS/Babylon.js@0592b347b8 (2026-08-30).
Data as JSON: /api/errors/521ccf8ff742e484.
Report an issue: GitHub.