strapi/packages/strapi-utils/lib/packageManager.js

77 lines
1.9 KiB
JavaScript
Raw Normal View History

const fs = require('fs');
2018-06-21 15:07:50 +02:00
const shell = require('shelljs');
const { includes } = require('lodash');
2018-06-21 15:07:50 +02:00
2018-06-22 16:46:48 +02:00
// let isStrapiInstalledWithNPM = true;
// let skipCheck = false;
2018-06-21 15:07:50 +02:00
const watcher = (cmd) => {
const data = shell.exec(cmd, {
silent: true,
});
if (includes(data.stderr, 'command not found') && data.code !== 0) {
2018-06-21 15:07:50 +02:00
throw new Error('Command not found');
}
return data.stdout.toString();
};
module.exports = {
2018-06-22 16:46:48 +02:00
isStrapiInstalledWithNPM: () => {
let isNPM = true;
let skipCheck = false;
// Check if we are in development mode (working with the monorepo)
// So we don't run `npm -g ls` which takes time
if (process.argv.indexOf('new') !== -1 && process.argv.indexOf('--dev') !== -1) {
skipCheck = true;
}
2018-06-22 16:46:48 +02:00
if (!skipCheck) {
try {
// Retrieve all the packages installed with NPM
const npmPath = watcher('npm root -g');
const data = fs.readdirSync(npmPath.trim());
2018-06-22 16:46:48 +02:00
// Check if strapi is installed with NPM
isNPM = includes(data, 'strapi');
2018-07-02 14:59:50 +02:00
2018-07-10 18:02:37 +02:00
if (isNPM) {
return isNPM;
}
2018-06-22 16:46:48 +02:00
try {
const yarnData = watcher('yarn global list');
isNPM = !includes(yarnData, 'strapi');
2018-06-22 16:46:48 +02:00
} catch(err) {
isNPM = true;
}
} catch(err) {
// If NPM is not installed strapi is installed with Yarn
isNPM = false;
}
}
return isNPM;
},
2018-06-21 15:07:50 +02:00
2018-07-02 14:59:50 +02:00
commands: function (cmdType, path = '') {
const isNPM = this.isStrapiInstalledWithNPM();
2018-06-21 15:07:50 +02:00
switch(cmdType) {
case 'install --prefix':
2018-06-22 16:46:48 +02:00
return isNPM ? `npm install --prefix ${path}` : `yarn --cwd ${path} add`;
2018-06-21 15:07:50 +02:00
case 'root -g':
2018-06-22 16:46:48 +02:00
return isNPM ? 'npm root -g' : 'yarn global dir';
2018-06-21 15:07:50 +02:00
case 'install global':
2018-06-22 16:46:48 +02:00
return isNPM ? 'npm install' : 'yarn install';
2018-06-21 15:07:50 +02:00
case 'install package':
2018-06-22 16:46:48 +02:00
return isNPM ? 'npm install' : 'yarn add';
2018-06-21 15:07:50 +02:00
default:
return '';
}
}
};