close
logo
Rslib
Guide
Config
Blog
English
简体中文
Guide
Config
Blog
English
简体中文
logo
Rslib

Getting Started

Introduction
Quick start
Glossary
Packages

Solution

Node.js
React
Vue

Basic

CLI
Configure Rslib
Use TypeScript
Output format
Output structure
Upgrade Rslib

Advanced

Handle third-party dependencies
Output compatibility
Declaration files
Import static assets
Import SVGR
Import JSON files
Module Federation
Use Storybook

Migration

Modern.js Module
tsup

FAQ

Features FAQ
📝 Edit this page on GitHub
Previous PageImport SVGR
Next PageModule Federation

#Import JSON files

Rslib supports importing JSON files in code, and also supports importing YAML and TOML files and converting them to JSON format.

#JSON file

You can directly import JSON files in JavaScript files.

WARNING

In bundle mode, JSON files support both default and named import.

In bundleless mode, JSON files only support named import.

#Default import

example.json
{
  "name": "foo",
  "items": [1, 2]
}
index.js
import example from './example.json';

console.log(example.name); // 'foo';
console.log(example.items); // [1, 2];

#Named import

Rslib also supports importing JSON files through named import.

Here is an example, assuming the source code is as follows:

src/index.ts
src/example.json
import { name } from './example.json';

console.log(name); // 'foo';

Based on the configuration in the output structure specified in the configuration file, the following outputs will be emitted:

bundle
bundleless
dist/index.js
var example_namespaceObject = {
  u: 'foo',
};
console.log(example_namespaceObject.u);

#Use import attributes

In bundle mode, Rslib supports import attributes, and you can import JSON files through import attributes:

index.js
import json from './example.json' with { type: 'json' };

In bundleless mode, when importing JSON files through import attributes, you need to ensure that references to the JSON files are preserved in the output, refer to document for configuration.

#YAML file

YAML is a data serialization language commonly used for writing configuration files.

By adding the @rsbuild/plugin-yaml plugin, you can import .yaml or .yml files in JavaScript and they will be automatically converted to JavaScript objects.

npm
yarn
pnpm
bun
npm add @rsbuild/plugin-yaml -D

#Register plugin

You can register the plugin in the rslib.config.ts file:

rslib.config.ts
import { pluginYaml } from '@rsbuild/plugin-yaml';

export default {
  plugins: [pluginYaml()],
};

#Example

src/index.ts
src/example.yaml
import example from './example.yaml';

console.log(example.hello); // 'world';
console.log(example.foo); // { bar: 'baz' };

#TOML file

TOML is a semantically explicit, easy-to-read configuration file format.

By adding the @rsbuild/plugin-toml plugin, you can import .toml files in JavaScript and it will be automatically converted to JavaScript objects.

npm
yarn
pnpm
bun
npm add @rsbuild/plugin-toml -D

#Register plugin

You can register the plugin in the rslib.config.ts file:

rslib.config.ts
import { pluginToml } from '@rsbuild/plugin-toml';

export default {
  plugins: [pluginToml()],
};

#Example

src/index.ts
src/example.toml
import example from './example.toml';

console.log(example.hello); // 'world';
console.log(example.foo); // { bar: 'baz' };

#Type declaration

When you import YAML or TOML files in TypeScript code, please create a src/env.d.ts file in your project and add the corresponding type declarations.

  • Method 1: If the @rslib/core package is installed, you can reference the preset types provided by @rslib/core:
src/env.d.ts
/// <reference types="@rslib/core/types" />
  • Method 2: Manually add the required type declarations:
src/env.d.ts
declare module '*.yaml' {
  const content: Record<string, any>;
  export default content;
}
declare module '*.yml' {
  const content: Record<string, any>;
  export default content;
}
declare module '*.toml' {
  const content: Record<string, any>;
  export default content;
}

#Bundle mode and output

Rslib supports outputting JSON / YAML / TOML files in different forms under different bundle modes.

#bundle

In bundle mode (bundle: true), JSON files will be directly bundled into JavaScript output, and unused keys in JSON files will be tree-shaken. The same applies to TOML and YAML files.

#bundleless

In bundleless mode (bundle: false), each JSON / YAML / TOML file will be converted into a corresponding JavaScript output file. JSON files will be converted to JSON.parse form and exported, while YAML and TOML files will be converted to JavaScript objects and exported.

If you want JSON / YAML / TOML files to be output to the distribution directory as-is, and keep the reference paths to these files in the output JavaScript files, you can achieve this through the following steps:

  1. Exclude JSON / YAML / TOML files from the bundleless entry file glob pattern.
  2. Reserve request paths for JSON / YAML / TOML files in output.externals.
  3. Add output.copy option to the output configuration, specifying the output path for JSON / YAML / TOML files.

For example, the following configuration will output all JSON files in the src directory as-is:

rslib.config.ts
export default defineConfig({
  lib: [
    {
      bundle: false,
      source: {
        entry: {
          index: ['./src/**', '!./src/**/*.json'],
        },
      },
      output: {
        copy: [{ from: './**/*.json', context: './src' }],
        externals: [/.*\.json$/],
      },
    },
  ],
});