Skip to content

Instantly share code, notes, and snippets.

@beatrizsmerino
Last active December 2, 2021 13:32
Show Gist options
  • Save beatrizsmerino/be1d7aeb52c5821a8032282d3f48bf4e to your computer and use it in GitHub Desktop.
Save beatrizsmerino/be1d7aeb52c5821a8032282d3f48bf4e to your computer and use it in GitHub Desktop.
Install dependencies globally and locally using package.json
{
"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"
}
}
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