Created
January 28, 2019 18:13
-
-
Save Joaquin6/7ab9b12fd51e6ffd90354aca614e1555 to your computer and use it in GitHub Desktop.
File that takes all devDeps and deps from package.json and uninstalls them and reinstalls them. Sometimes this is necessayr to clean out your yarn slate and start fresh.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env node | |
// normally this file goes in bin/reinstall.js | |
// called by "reinstall": "node bin/reinstall.js" | |
const { promisify } = require('util'); | |
const exec = promisify(require('child_process').exec); | |
const pkg = require('../package.json'); | |
const { dependencies, devDependencies } = pkg; | |
function generateYarnAddScript(dev = false) { | |
let yarnScript = 'yarn add'; | |
const packages = dev ? devDependencies : dependencies; | |
if (dev) { | |
yarnScript += ' -D'; | |
} | |
for (const nodePackage in packages) { | |
if (packages.hasOwnProperty(nodePackage)) { | |
const version = packages[nodePackage]; | |
yarnScript += ` ${nodePackage}@${version}`; | |
} | |
} | |
return yarnScript; | |
} | |
function generateYarnRemoveScript(dev = false) { | |
let yarnScript = 'yarn remove'; | |
const packages = dev ? devDependencies : dependencies; | |
Object.keys(packages) | |
.forEach(nodePackage => { | |
yarnScript += ` ${nodePackage}`; | |
}); | |
return yarnScript; | |
} | |
function generateYarnScript(mode) { | |
const dev = mode === 'dev' ? true : false; | |
console.info(`Environment: ${mode}`); | |
console.info(`Reinstalling: ${dev ? 'devDependencies' : 'dependencies'}`); | |
const yarnRemove = generateYarnRemoveScript(dev); | |
const yarnAdd = generateYarnAddScript(dev); | |
return `${yarnRemove} && ${yarnAdd}`; | |
} | |
function readEnvironment() { | |
const myArgs = process.argv.slice(2); | |
for (let i = 0; i < myArgs.length; i++) { | |
if (myArgs[i].indexOf('D') > 0) { | |
return 'dev'; | |
} | |
} | |
return 'prod'; | |
} | |
async function reinstall() { | |
const yarnScript = generateYarnScript(readEnvironment()); | |
console.info(`\nExecuting Script:\n\t${yarnScript}`); | |
let error, stdout, stderr; | |
try { | |
({ error, stdout, stderr } = await exec(yarnScript)); | |
} catch (err) { | |
error = err; | |
} | |
if (error) { | |
console.error(`\nEXEC ERROR:\t${error}`); | |
return; | |
} | |
console.log(`\nSTDOUT:\t${stdout}`); | |
console.log(`\nSTDERR:\t${stderr}`); | |
console.log('\nReinstall executed successfully!'); | |
} | |
reinstall(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment