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!

--

--

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