1.1.0 • Published 1 year ago

vite-plugin-barrels v1.1.0

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

vite-plugin-barrels

Automatically generate barrels for your folders! This plugin taps into the Vite plugin system to automatically recreate barrels on build and whenever a file gets updated or created.

:warning: Warning
This will remove all content existing in the index of the entry directory and all subdirectories. Only point the entry at a folder with no index files!

Installation

npm install -D vite-plugin-barrels

Usage

Add the following to your Vite configuration:

// vite.config.js
import barrels from 'vite-plugin-barrels';

export default {
    // ...
    plugins: [
        barrels({
            entry: '<your entry folder>',
            extension: '<whatever extension>'
        })
    ]
}

Example

This is an example for Svelte. The extension to barrel is .svelte with the entry being src/lib.

// vite.config.js
import barrels from 'vite-plugin-barrels';

export default {
    // ...
    plugins: [
        barrels({
            entry: 'src/lib',
            extension: '.svelte'
        })
    ]
}

Before the build, the directory structure looks like this:

src
└───lib
    │   Another.svelte
    │   Component.svelte
    │
    └───layout
            Container.svelte

After the build, the barrels get generated:

src
└───lib
    │   Another.svelte
    │   Component.svelte
    │   index.ts
    │
    └───layout
            Container.svelte
            index.ts

Barrel content:

// src/lib/index.ts
// Generated by vite-plugin-barrels

export * from "./layout";
export { default as Another } from "./Another.svelte";
export { default as Test } from "./Test.svelte";
// src/lib/layout/index.ts
// Generated by vite-plugin-barrels

export { default as Container } from "./Container.svelte";

Configuration

interface Options {
    /**
     * Starting directory
     */
    entry: string;

    /**
     * File extension to search for
     */
    extension: string | string[] | RegExp;

    /**
     * Weather or not to use typescript
     * @default true When tsconfig.json is found
     */
    ts?: boolean;
}