Simplifying File Imports in Angular with New Loader Options

Netanel Basal
Netanel Basal
Published in
2 min readFeb 1, 2024

There's an update in the application builder in v17.1.0 that introduces new loader options, making file handling more straightforward. These options allow you to specify how different file types are processed.

Here's a quick overview of the available loaders:

  • Text Loader (text): Converts file content into a string, ideal for text files
  • Binary Loader (binary): Transforms binary files into Uint8Array, useful for handling binary data
  • File Loader (file): Keeps files separate and provides their runtime location, perfect for assets
  • Empty Loader (empty): Excludes files from your bundle

Configuring these loaders is simple. For example, to inline SVG content directly into your application, you would adjust your angular.json like this:

{
"architect": {
"build": {
"options": {
"loader": {
".svg": "text"
}
}
}
}
}

This setup inlines SVG files as strings, eliminating the need for external file requests for your graphics:

import foo from './some-big-img.svg';

@Component({
selector: 'app-user-profile',
standalone: true,
})
export class UserProfileComponent {
constructor() {
import('./user.svg').then((res) => res.default).then(console.log);
}
}

To ensure TypeScript compatibility, especially with custom loaders like for SVG files, include a type definition file in your project. This can be done by adding a file (e.g., src/types.d.ts) with the following content:

declare module "*.svg" {
const content: string;
export default content;
}

This step prevents TypeScript from throwing errors for unknown file types.

Follow me on Medium or Twitter to read more about Angular and JS!

--

--

Netanel Basal
Netanel Basal

Written by Netanel Basal

A FrontEnd Tech Lead, blogger, and open source maintainer. The founder of ngneat, husband and father.

Responses (3)