UNPKG

barro

Version:

Flexible barrel file generation for Javascript and Typescript with watching built-in.

116 lines (88 loc) 2.86 kB
# barro Flexible barrel file generation for Javascript and Typescript with watching built-in. ## Usage Define your barrels in `./barro.js`: ```js module.exports = () => [ { out: "src/models/index.ts", match: "**/*Model.ts", }, { out: "src/fns/index.ts", match: "**/*.ts", }, ]; ``` Build barrels once: ``` npx barro --write ``` Build barrels and rebuild when relevant files are added or removed: ``` npx barro --write --watch ``` Alternatively, you can pass the path of your barro config file: ``` npx barro barrel-config.js --write --watch ``` Alternatively, you can define your barro config in your `package.json` as `barro`: ``` npx barro package.json --write --watch ``` ## Config - `out` - The path the barrel file should be written to. - `match` - The glob or array of globs to use when searching for files to include in the barrel. - `matchDirectory` - The root directory to use when searching for files. Default: `path.parse(out).dir` - `matchIgnore` - The optional array of globs to ignore when seaching for files. Default: `[out, "**/*.test.*"]` - `template` - The [handlebars](https://www.npmjs.com/package/handlebars) template string or function to use when generating barrel files. Defaults to `export * from "./file/path";` for every matched file. - `ignoreBarrels` - Whether or not to ignore `index.*` files. Defaults to `true`. - `ignoreTests` - Whether or not to ignore `*.test.*` and `*.spec.*` files. Defaults to `true`. - `banner` - The banner comment placed at the top of the output barrel file. Defaults to a "do not edit" message. ### Custom templates You can include custom barrel templates in your barrel config file using the `template` field. The template can be either a handlebars template string or a function that returns a string. Custom templates are provided a `files` input with these fields: ```ts { relativePath: string; absolutePath: string; path: string; name: string; } ``` #### Custom handlebars template You can use [handlebars](https://www.npmjs.com/package/handlebars) templates to generate custom barrels: ```js const { readFileSync } = require("fs"); module.exports = ({ Handlebars }) => { Handlebars.registerHelper("loud", (str) => str.toUpperCase()); return [ { out: "src/models/index.ts", match: "**/*Model.ts", template: fs.readFileSync("./modelBarrel.hbs", "utf8"), }, ]; }; ``` #### Custom function template You can use plain JS functions to generate custom barrels: ```js module.exports = () => [ { out: "src/models/index.ts", match: "**/*Model.ts", template({ files }) { return files .map( (file) => `export { default as ${file.name.toUpperCase()} } from "./${ file.path }";` ) .join("\n"); }, }, ]; ``` ## License MIT