Skip to content

Instantly share code, notes, and snippets.

@jonsamp
Last active June 30, 2020 02:57
Show Gist options
  • Select an option

  • Save jonsamp/b9dd766b32e6d572f226b10329391a20 to your computer and use it in GitHub Desktop.

Select an option

Save jonsamp/b9dd766b32e6d572f226b10329391a20 to your computer and use it in GitHub Desktop.

Revisions

  1. jonsamp renamed this gist Jun 30, 2020. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. jonsamp created this gist Jun 30, 2020.
    52 changes: 52 additions & 0 deletions find unused react components
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,52 @@
    const { spawnSync } = require('child_process');

    // const packageJSON = require('./package.json');

    // const modules = { ...packageJSON.dependencies, ...packageJSON.devDependencies };

    // const allModuleNames = Object.keys(modules);

    const fs = require('fs');
    const path = require('path');

    function fileList(dir) {
    return fs.readdirSync(dir).reduce(function (list, file) {
    var name = path.join(dir, file);
    var isDir = fs.statSync(name).isDirectory();
    return list.concat(isDir ? fileList(name) : [name]);
    }, []);
    }

    // PROVIDE FILE PATH
    const result = fileList('./ui/')
    .filter((name) => name.match(/tsx|ts|js/) && !name.match(/\.next|-|_|index|pages/))
    .filter((name) => {
    const nameParts = name.split('/');
    const lastPart = nameParts[nameParts.length - 1];
    return lastPart.toLowerCase() !== lastPart;
    })
    .map((name) => {
    const nameParts = name.split('/');
    const lastPart = nameParts[nameParts.length - 1];
    const nameOnly = lastPart.split('.')[0];
    return nameOnly;
    });

    const unusedModuleNames = [];

    for (const moduleName of result) {
    const numTimesUsed = spawnSync(
    'sh',
    [
    '-c',
    `grep -R --exclude-dir={node_modules,flow-typed,build,coverage,.expo,.next} --exclude={yarn.lock,package.json,test.js} "${moduleName}';" . | wc -l`,
    ],
    { encoding: 'utf8' }
    ).stdout.trim();
    console.log(moduleName, numTimesUsed);
    if (parseInt(numTimesUsed, 10) === 0) {
    unusedModuleNames.push(moduleName);
    }
    }
    console.log('POSSIBLY UNUSED MODULES:');
    unusedModuleNames.forEach((moduleName) => console.log(moduleName));