Git Product home page Git Product logo

barrelbot's Introduction

🤖Barrelbot

The Automated barrel file manager

Recursively watches a folder and generates barrel files (What is a barrel file?)

  • Install globally, run anywhere you want
  • generates index.tsx files by default, use a flag for .ts, .js, .jsx

barrelbot

How to use

Install globally (or locally up to you)

npm i -g barrelbot

Then in your project, assuming you want to generate barrel files in /src:

barrelbot watch src

It ignores files that you would normally want to ignore based on . in the filename, e.g.:

  • two or more dots e.g. foo.stories.js or bar.spec.ts
  • starting with a dog e.g. .somedotfile

Option: --ext {js, jsx, ts, tsx}

By default barrelbot assumes you want to use and output a .tsx extension. you can configure this with a --extension or --ext flag:

barrelbot watch src --extension js

Option: --namespace {none, all, defaultOnly}

By default barrelbot assumes you export everything without a namespace, so it generates exports like:

// barrelbot watch myFolder
// index.js
export * from './foo';

However, many people understandably have different styles (open an issue if you have a strong opinion on what the default should be), so you can configure this with a --namespace or --n flag:

all:

// barrelbot watch myFolder --namespace all
// index.js
import * as foo from './foo';
export { foo };

defaultOnly:

// barrelbot watch myFolder --namespace defaultOnly
// index.js
export { default as foo } from './foo';

Visualizing what it does

Given a file structure like

- someFolder
- myWatchedFolder
  - components
    - Header
      - Logo.tsx
      - Title.tsx
      - Logo.test.tsx
    - Main.tsx
    - Button.tsx
    - Button.spec.ts
  - App.tsx
  - .somedotfile

When you run barrelbot watch myWatchedFolder, it results in:

- someFolder
- myWatchedFolder
  - components
    - Header
      - Logo.tsx
      - Title.tsx
      - Logo.test.tsx
      - index.tsx
    - Main.tsx
    - Button.tsx
    - Button.spec.ts
    - index.tsx
  - App.tsx
  - .somedotfile
  - index.tsx

while ignoring the *.test.tsx, *.spec.ts, and .somedotfile.

Tip!

Before running barrelbot, I advise committing your project to git first.

This way, if you run the bot and find barrel files that aren't generated to your liking, you can run git clean -f to remove them.

Plan

  • interactive fix mode

currently the bot bails out whenever a noncompliant index.ts file is found. we can add ignore and skip semantics as well as an interactive fix method for easier onboarding.

Inspiration

https://github.com/bencoveney/barrelsby

how it differs:

  • watch mode by default
  • barrel file only for the files at every directory level, not one megafile

barrelbot's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

barrelbot's Issues

doesnt work as expected

hi,
i used:
barrelbot watch src/components

it produced : index.ts (not tsx!)

`
// THIS FILE IS AUTOGENERATED AND MANAGED BY BARRELBOT. DO NOT EDIT

// for more info: https://github.com/sw-yx/barrelbot
export * from './SmallButton.module.css'
export * from './SmallButton.module.css.d'
export * from './SmallButton.test.tsx'
export * from './SmallButton.tsx'
`

and it gives me an error , should be :
export * from './SmallButton' and so on. also I would like to have a way to ignore css , tests ...

Does not honor defaultOnly flag

barrelbot watch src --extension ts --namespace defaultOnly

Results in

// THIS FILE IS AUTOGENERATED AND MANAGED BY BARRELBOT. DO NOT EDIT

// for more info: https://github.com/sw-yx/barrelbot
export * from './macros.tsx'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.