Last active
December 2, 2021 13:32
-
-
Save beatrizsmerino/be1d7aeb52c5821a8032282d3f48bf4e to your computer and use it in GitHub Desktop.
Install dependencies globally and locally using package.json
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
{ | |
"name": "git-commitlint", | |
"version": "1.0.0", | |
"description": "", | |
"main": "index.js", | |
"scripts": { | |
"preinstall": "node ./bin/preinstall-global-packages.js", | |
"test": "echo \"Error: no test specified\" && exit 1" | |
}, | |
"keywords": [], | |
"author": "", | |
"license": "ISC", | |
"dependencies": {}, | |
"devDependencies": {}, | |
"globalDependencies": { | |
"@commitlint/cli": "^15.0.0", | |
"@commitlint/config-conventional": "^15.0.0", | |
"commitizen": "^4.2.4", | |
"cz-conventional-changelog": "^3.2.0" | |
} | |
} |
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
const { execSync } = require('child_process'); | |
const fs = require('fs'); | |
const package = JSON.parse(fs.readFileSync('package.json')); | |
console.log('π Installing global packages'); | |
getOperatingSystem(); | |
function getOperatingSystem() { | |
const nameOS = process.platform; | |
console.groupCollapsed('π₯οΈ Operation System:', nameOS); | |
switch (nameOS) { | |
case 'darwin': | |
console.log('π MacOS detected'); | |
break; | |
case 'win32': | |
console.log('π‘ Windows detected'); | |
break; | |
case 'linux': | |
console.log('π§ Linux detected'); | |
break; | |
default: | |
console.log('π€·ββοΈ Unknown detected'); | |
break; | |
} | |
console.groupEnd(); | |
return nameOS; | |
} | |
function checkMacOS() { | |
const nameOS = getOperatingSystem(); | |
if (nameOS == 'darwin') { | |
return true; | |
} else { | |
return false; | |
} | |
} | |
function getGlobalDependenciesInstalled() { | |
const objList = JSON.parse(execSync(`npm list -g --depth 0 --json`).toString()).dependencies; | |
const arrayList = Object.keys(objList); | |
const total = arrayList.length; | |
arrayList.forEach((dependenceName) => { | |
delete objList[dependenceName]['from']; | |
delete objList[dependenceName]['resolved']; | |
}); | |
console.groupCollapsed('π Global dependencies installed:', total); | |
console.table(objList); | |
console.groupEnd(); | |
return objList; | |
} | |
function getGlobalDependenciesToInstall() { | |
const objList = package.globalDependencies; | |
const arrayList = Object.keys(objList); | |
const total = arrayList.length; | |
console.groupCollapsed('π Global dependencies to install:', total); | |
console.table(objList); | |
console.groupEnd(); | |
return objList; | |
} | |
async function installGlobalDependencies() { | |
const installed = getGlobalDependenciesInstalled(); | |
const toInstall = getGlobalDependenciesToInstall(); | |
Object.keys(toInstall).forEach((dependenceName) => { | |
const found = Object.keys(installed).find(dependenceInstalled => dependenceInstalled === dependenceName); | |
const dependenceVersion = toInstall[dependenceName].replace('~', ').replace('^', '); | |
if (!found) { | |
console.log(`βοΈ Installing dependencies: ${dependenceName}@${dependenceVersion}`); | |
execSync(`${checkMacOS() ? 'sudo' : ''} npm i -g ${dependenceName}@${dependenceVersion}`); | |
} else { | |
console.log(`π Dependencies already installed: ${dependenceName}@${dependenceVersion}`); | |
} | |
}); | |
} | |
installGlobalDependencies() | |
.then(result => { | |
console.log('π Pre-installation of global packages is completed!'); | |
}) | |
.catch(err => { | |
console.log(err) | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment