diff --git a/packages/cli/README.md b/packages/cli/README.md index 4115e7bf..6cc42ff9 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -33,6 +33,7 @@ Options: --replace-attr-values replace an attribute value --template specify a custom template to use --index-template specify a custom index.js template to use + --no-index disable index file generation --title-prop create a title element linked with props --prettier-config Prettier config --no-prettier disable Prettier diff --git a/packages/cli/src/__snapshots__/index.test.js.snap b/packages/cli/src/__snapshots__/index.test.js.snap index 484bd62d..fd651f49 100644 --- a/packages/cli/src/__snapshots__/index.test.js.snap +++ b/packages/cli/src/__snapshots__/index.test.js.snap @@ -18,6 +18,12 @@ export default SvgFile; exports[`cli should support --index-template in cli 1`] = `"export { File } from './File'"`; +exports[`cli should support --no-index 1`] = ` +Array [ + "File.js", +] +`; + exports[`cli should support --prettier-config as file 1`] = ` "import * as React from 'react' diff --git a/packages/cli/src/dirCommand.js b/packages/cli/src/dirCommand.js index 6da62dde..0ebe9154 100644 --- a/packages/cli/src/dirCommand.js +++ b/packages/cli/src/dirCommand.js @@ -75,9 +75,8 @@ export default async function dirCommand( return { transformed: true, dest } } - async function generateIndex(dest, files) { + async function generateIndex(dest, files, config) { const indexFile = path.join(dest, `index.${ext}`) - const config = loadConfig.sync(options, { filePath: indexFile }) const indexTemplate = config.indexTemplate || defaultIndexTemplate await fs.writeFile(indexFile, indexTemplate(files)) } @@ -98,7 +97,10 @@ export default async function dirCommand( if (transformed.length) { const destFiles = results.map((result) => result.dest).filter(Boolean) const dest = path.resolve(opts.outDir, path.relative(root, dirname)) - await generateIndex(dest, destFiles) + const config = loadConfig.sync(options, { filePath: dest }) + if (config.index) { + await generateIndex(dest, destFiles, config) + } } return { transformed: false, dest: null } } diff --git a/packages/cli/src/index.js b/packages/cli/src/index.js index 32b48aee..96d11c3c 100644 --- a/packages/cli/src/index.js +++ b/packages/cli/src/index.js @@ -90,6 +90,7 @@ program '--index-template ', 'specify a custom index.js template to use', ) + .option('--no-index', 'disable index file generation') .option('--title-prop', 'create a title element linked with props') .option( '--prettier-config ', @@ -200,6 +201,10 @@ async function run() { } } + if (opts.index === false) { + delete config.index + } + const command = opts.outDir ? dirCommand : fileCommand await command(opts, program, filenames, config) diff --git a/packages/cli/src/index.test.js b/packages/cli/src/index.test.js index e557c327..8c423e9d 100644 --- a/packages/cli/src/index.test.js +++ b/packages/cli/src/index.test.js @@ -209,4 +209,12 @@ describe('cli', () => { const content = await fs.readFile(path.join(outDir, 'index.js'), 'utf-8') expect(content).toMatchSnapshot() }, 10000) + + it('should support --no-index', async () => { + const inDir = '__fixtures__/simple' + const outDir = `__fixtures_build__/no-index-case` + await del(outDir) + await cli(`--no-index ${inDir} --out-dir=${outDir}`) + expect(await fs.readdir(outDir)).toMatchSnapshot() + }, 10000) }) diff --git a/packages/core/src/config.js b/packages/core/src/config.js index 3318d4b1..c277c053 100644 --- a/packages/core/src/config.js +++ b/packages/core/src/config.js @@ -15,6 +15,7 @@ export const DEFAULT_CONFIG = { svgo: true, svgoConfig: null, template: null, + index: false, titleProp: false, runtimeConfig: true, plugins: null, diff --git a/packages/core/src/index.d.ts b/packages/core/src/index.d.ts index 12dcc334..d23cbaf5 100644 --- a/packages/core/src/index.d.ts +++ b/packages/core/src/index.d.ts @@ -68,6 +68,8 @@ export interface SvgrOpts { * https://github.com/gregberge/svgr/blob/main/packages/babel-plugin-transform-svg-component/src/index.js */ template?: TemplateFunc + /** Disable index file generation. */ + index?: boolean /** Output files into a directory. */ outDir?: string /** diff --git a/website/pages/docs/options.mdx b/website/pages/docs/options.mdx index d9e36b60..4f260279 100644 --- a/website/pages/docs/options.mdx +++ b/website/pages/docs/options.mdx @@ -188,6 +188,14 @@ Specify a template function (API) to change default index.js output (when --out- | ------------------------------------------------------------------------------------------------ | ------------------ | -------------------------- | | [`basic template`](https://github.com/gregberge/svgr/blob/master/packages/cli/src/dirCommand.js) | `--index-template` | indexTemplate: files => '' | +## index.js file + +Disable index.js file generation + +| Default | CLI Override | API Override | +| ------- | ------------ | --------------- | +| `false` | `--no-index` | `index: ` | + ## Ignore existing When used with `--out-dir`, it ignores already existing files.