nx/packages/devkit/src/tasks/install-packages-task.ts
2020-11-26 10:19:13 -05:00

26 lines
989 B
TypeScript

import { Tree } from '@nrwl/tao/src/shared/tree';
import { detectPackageManager } from '@nrwl/tao/src/shared/detect-package-manager';
import { execSync } from 'child_process';
let storedPackageJsonValue;
/**
* Runs `npm install` or `yarn install`. It will skip running the install if
* `package.json` hasn't changed at all or it hasn't changed since the last invocation.
*
* @param host - the file system tree
* @param alwaysRun - always run the command even if `package.json` hasn't changed.
*/
export function installPackagesTask(host: Tree, alwaysRun: boolean = false) {
const packageJsonValue = host.read('package.json').toString();
if (host.listChanges().find((f) => f.path === 'package.json') || alwaysRun) {
if (storedPackageJsonValue != packageJsonValue || alwaysRun) {
storedPackageJsonValue = host.read('package.json').toString();
execSync(`${detectPackageManager()} install`, {
cwd: host.root,
stdio: [0, 1, 2],
});
}
}
}