Skip to content

Instantly share code, notes, and snippets.

@loopmode
Last active November 11, 2019 06:45
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save loopmode/318e881454dc0498874a4e764d3dce55 to your computer and use it in GitHub Desktop.
Save loopmode/318e881454dc0498874a4e764d3dce55 to your computer and use it in GitHub Desktop.
Node.js function to get the names of all devDependencies in a yarn or lerna workspace
module.exports = async function getDevDependencies(globs = ['package.json', 'packages/*/*.json']) {
const globby = require('globby');
const packageFiles = await globby(globs, { absolute: true });
return packageFiles.reduce((result, file) => {
const pkg = require(file);
if (pkg.devDependencies) {
const names = Object.keys(pkg.devDependencies);
return result.concat(names.filter(name => !result.includes(name)));
}
return result;
}, []).sort();
}
(async () => {
const getDevDependencies = require('./get-dev-dependencies');
const devDependencies = await getDevDependencies(['package.json', 'client/*/*.json', 'server/*/*.json']);
console.log(devDependencies)
})();
// see https://gist.github.com/pxwise/c4833557930a5141c4e3c752347e2f2e
/**
* Approximate `npm prune --production` using `yarn remove`.
* @see https://github.com/yarnpkg/yarn/issues/696
*/
const exec = require('child_process').exec;
const getDevDependencies = require('./get-dev-dependencies');
(async () => {
// given a package.json with "workspaces": ["client/*", "server/*"]
const devDependencies = await getDevDependencies(['package.json', 'client/*/*.json', 'server/*/*.json']).join(', ');
const command = 'yarn remove ' + devDependencies;
const child = exec(command, (err, stdout, stderr) => {
if (err) throw err;
console.log(`stdout: \n${stdout}`);
console.log(`stderr: \n${stderr}`);
});
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment