With Nx, you can import
assets directly from your TypeScript/JavaScript code.
import React from 'react';import logo from './logo.png';
const Header = () => <img src={logo} alt="Logo" />;
export default Header;
This import will be replaced by a string of the image path when the application builds. To reduce the number of network requests, if the image file size is less than 10 kB, then the image will be inlined using data URI instead of a path.
This works in CSS files as well.
.logo { background-image: url(./logo.png);}
Adding SVGs
Section titled “Adding SVGs”SVG images can be imported using the method described previously.
Alternatively, you can import SVG images as React components using SVGR.
import React from 'react';import { ReactComponent as Logo } from './logo.svg';
const Header = () => <Logo title="Logo" />;
export default Header;
This method of import allow you to work with the SVG the same way you would with any other React component. You can style it using CSS, styled-components, TailwindCSS, etc. The SVG component accepts a title
prop, as well as any other props that the svg
element accepts.
SVGR for Next.js
Section titled “SVGR for Next.js”To import SVGs as React components with Next.js, you need to make sure that nx.svgr
value is set to true
in your Next.js application's next.config.js
file:
// ...const nextConfig = { nx: { svgr: true, },};// ...module.exports = composePlugins(...plugins)(nextConfig);
SVGR for Vite
Section titled “SVGR for Vite”To import SVGs as React components with Vite, you need to install the vite-plugin-svgr
package.
npm add -D vite-plugin-svgr
yarn add -D vite-plugin-svgr
pnpm add -D vite-plugin-svgr
bun add -D vite-plugin-svgr
Then, configure Vite as follows:
/// <reference types='vitest' />import { defineConfig } from 'vite';import react from '@vitejs/plugin-react';import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';import svgr from 'vite-plugin-svgr';
export default defineConfig({ // ... plugins: [ svgr({ svgrOptions: { exportType: 'named', ref: true, svgo: false, titleProp: true, }, include: '**/*.svg', }), react(), nxViteTsPaths(), // ... ], //...});