Skip to content

Instantly share code, notes, and snippets.

@Rikezenho
Created January 24, 2019 23:13
Show Gist options
  • Save Rikezenho/3df089c06372fe9ed0c69a55aa413d7a to your computer and use it in GitHub Desktop.
Save Rikezenho/3df089c06372fe9ed0c69a55aa413d7a to your computer and use it in GitHub Desktop.
Script para varrer todos os package.json dos subdiretórios de uma pasta e listar as dependências
const fs = require('fs');
const path = require('path');
const chalk = require('chalk');
const figlet = require('figlet');
const modulesPath = path.join(__dirname, '..', 'modules');
const foldersWithPackages = fs.readdirSync(modulesPath).filter(folder => {
const fullPath = path.join(modulesPath, folder);
return fs.existsSync(path.join(fullPath, 'package.json'));
});
const allPackages = {};
foldersWithPackages.map(folder => {
const fullPath = path.join(modulesPath, folder);
const configPackage = require(path.join(fullPath, 'package.json'));
allPackages[folder] = {
devDeps: configPackage.devDependencies,
deps: configPackage.dependencies
};
return folder;
});
// console.log(allPackages);
const allDevDeps = {};
Object.keys(allPackages).map(project => {
Object.keys(allPackages[project].devDeps).map(dep => {
allDevDeps[dep] = Object.assign({}, allDevDeps[dep], {
[project]: allPackages[project].devDeps[dep]
});
return dep;
});
return project;
});
// console.log(allDevDeps);
const allDeps = {};
Object.keys(allPackages).map(project => {
Object.keys(allPackages[project].deps).map(dep => {
allDeps[dep] = Object.assign({}, allDeps[dep], {
[project]: allPackages[project].deps[dep]
});
return dep;
});
return project;
});
// console.log(allDeps);
let finalText = '';
finalText += `${figlet.textSync('DEVDEPS')}\r\n`;
Object.keys(allDevDeps).map(dep => {
finalText += `${chalk.cyan(dep)}\r\n`;
const repeats = {};
Object.keys(allDevDeps[dep]).map(project => {
const version = allDevDeps[dep][project];
if (repeats[version]) {
repeats[version].push(project);
} else {
repeats[version] = [project];
}
return project;
});
Object.keys(repeats).map(version => {
finalText += `${chalk.yellow(
`>> [${repeats[version].length}/${Object.keys(allPackages).length}]`
)} ${chalk.black.bgYellow(`${version}`)} => ${chalk.green(repeats[version].join(', '))}\r\n`;
return version;
});
return dep;
});
finalText += `${figlet.textSync('DEPS')}\r\n`;
Object.keys(allDeps).map(dep => {
finalText += `${chalk.cyan(dep)}\r\n`;
const repeats = {};
Object.keys(allDeps[dep]).map(project => {
const version = allDeps[dep][project];
if (repeats[version]) {
repeats[version].push(project);
} else {
repeats[version] = [project];
}
return project;
});
Object.keys(repeats).map(version => {
finalText += `${chalk.yellow(
`>> [${repeats[version].length}/${Object.keys(allPackages).length}]`
)} ${chalk.black.bgYellow(`${version}`)} => ${chalk.green(repeats[version].join(', '))}\r\n`;
return version;
});
return dep;
});
console.log(finalText);
@Rikezenho
Copy link
Author

Separados por:

  • dependencies e devDependencies
  • quais versões aparecem
  • e em quais projetos

Dependências:

  • NodeJS
$ npm i chalk figlet

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment