mirror of
https://github.com/angular/angular-cli.git
synced 2025-05-16 18:43:42 +08:00
If no version specifier is supplied `ng add` will now try to find the most recent version of the package that has peer dependencies that match the package versions supplied in the project's package.json
69 lines
1.8 KiB
TypeScript
69 lines
1.8 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright Google Inc. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.io/license
|
|
*/
|
|
|
|
import { logging, terminal } from '@angular-devkit/core';
|
|
import { spawn } from 'child_process';
|
|
|
|
|
|
export type NpmInstall = (packageName: string,
|
|
logger: logging.Logger,
|
|
packageManager: string,
|
|
projectRoot: string,
|
|
save?: boolean) => Promise<void>;
|
|
|
|
export default async function (packageName: string,
|
|
logger: logging.Logger,
|
|
packageManager: string,
|
|
projectRoot: string,
|
|
save = true) {
|
|
const installArgs: string[] = [];
|
|
switch (packageManager) {
|
|
case 'cnpm':
|
|
case 'npm':
|
|
installArgs.push('install', '--quiet');
|
|
break;
|
|
|
|
case 'yarn':
|
|
installArgs.push('add');
|
|
break;
|
|
|
|
default:
|
|
packageManager = 'npm';
|
|
installArgs.push('install', '--quiet');
|
|
break;
|
|
}
|
|
|
|
logger.info(terminal.green(`Installing packages for tooling via ${packageManager}.`));
|
|
|
|
if (packageName) {
|
|
installArgs.push(packageName);
|
|
}
|
|
|
|
if (!save) {
|
|
installArgs.push('--no-save');
|
|
}
|
|
const installOptions = {
|
|
stdio: 'inherit',
|
|
shell: true,
|
|
};
|
|
|
|
await new Promise((resolve, reject) => {
|
|
spawn(packageManager, installArgs, installOptions)
|
|
.on('close', (code: number) => {
|
|
if (code === 0) {
|
|
logger.info(terminal.green(`Installed packages for tooling via ${packageManager}.`));
|
|
resolve();
|
|
} else {
|
|
const message = 'Package install failed, see above.';
|
|
logger.info(terminal.red(message));
|
|
reject(message);
|
|
}
|
|
});
|
|
});
|
|
}
|