mirror of
https://github.com/strapi/strapi.git
synced 2025-11-01 18:33:55 +00:00
Merge pull request #19009 from strapi/upgrade-tool/install-dependencies-v5
This commit is contained in:
commit
187331431d
@ -3,6 +3,7 @@ import execa from 'execa';
|
||||
import logger from './logger';
|
||||
import type { Options } from '../types';
|
||||
|
||||
// TODO: Refactor run install, use the methods available in @strapi/utils instead
|
||||
export function runInstall(path: string, { useYarn }: Options = {}) {
|
||||
return execa(useYarn ? 'yarn' : 'npm', ['install'], {
|
||||
cwd: path,
|
||||
|
||||
@ -42,14 +42,16 @@
|
||||
"test:ts": "run -T tsc --noEmit",
|
||||
"test:unit": "run -T jest",
|
||||
"test:unit:watch": "run -T jest --watch",
|
||||
"watch": "run -T pack-up watch"
|
||||
"watch": "pack-up watch"
|
||||
},
|
||||
"dependencies": {
|
||||
"@sindresorhus/slugify": "1.1.0",
|
||||
"date-fns": "2.30.0",
|
||||
"execa": "5.1.1",
|
||||
"http-errors": "1.8.1",
|
||||
"lodash": "4.17.21",
|
||||
"p-map": "4.0.0",
|
||||
"preferred-pm": "3.1.2",
|
||||
"yup": "0.32.9"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@ -44,6 +44,7 @@ import * as file from './file';
|
||||
import * as traverse from './traverse';
|
||||
import webhook from './webhook';
|
||||
import { isOperator, isOperatorOfType } from './operators';
|
||||
import * as packageManager from './package-manager';
|
||||
|
||||
export {
|
||||
parseMultipartData,
|
||||
@ -95,4 +96,5 @@ export {
|
||||
webhook,
|
||||
isOperator,
|
||||
isOperatorOfType,
|
||||
packageManager,
|
||||
};
|
||||
|
||||
37
packages/core/utils/src/package-manager.ts
Normal file
37
packages/core/utils/src/package-manager.ts
Normal file
@ -0,0 +1,37 @@
|
||||
import execa from 'execa';
|
||||
import preferredPM from 'preferred-pm';
|
||||
|
||||
import type { Options as ProcessOptions } from 'execa';
|
||||
|
||||
const SUPPORTED_PACKAGE_MANAGERS = ['npm', 'yarn'];
|
||||
const DEFAULT_PACKAGE_MANAGER = 'npm' as const;
|
||||
|
||||
type SupportedPackageManagerName = 'npm' | 'yarn';
|
||||
|
||||
export const getPreferred = async (pkgPath: string): Promise<SupportedPackageManagerName> => {
|
||||
const pm = await preferredPM(pkgPath);
|
||||
|
||||
const hasPackageManager = pm !== undefined;
|
||||
if (!hasPackageManager) {
|
||||
throw new Error(`Couldn't find a package manager in your project.`);
|
||||
}
|
||||
|
||||
const isPackageManagerSupported = SUPPORTED_PACKAGE_MANAGERS.includes(pm.name);
|
||||
if (!isPackageManagerSupported) {
|
||||
process.emitWarning(
|
||||
`We detected your package manager (${pm.name} v${pm.version}), but it's not officially supported by Strapi yet. Defaulting to npm instead.`
|
||||
);
|
||||
|
||||
return DEFAULT_PACKAGE_MANAGER;
|
||||
}
|
||||
|
||||
return pm.name as SupportedPackageManagerName;
|
||||
};
|
||||
|
||||
export const installDependencies = (
|
||||
path: string,
|
||||
packageManager: SupportedPackageManagerName,
|
||||
options: ProcessOptions<string> = {}
|
||||
) => {
|
||||
return execa(packageManager, ['install'], { ...options, cwd: path, stdin: 'ignore' });
|
||||
};
|
||||
@ -59,6 +59,7 @@
|
||||
"watch": "pack-up watch"
|
||||
},
|
||||
"dependencies": {
|
||||
"@strapi/utils": "4.15.5",
|
||||
"chalk": "4.1.2",
|
||||
"cli-table3": "0.6.2",
|
||||
"commander": "8.3.0",
|
||||
|
||||
@ -33,6 +33,14 @@ export class Logger implements LoggerInterface {
|
||||
return this.nbWarningsCalls;
|
||||
}
|
||||
|
||||
get stdout(): (NodeJS.WriteStream & { fd: 1 }) | undefined {
|
||||
return this.isSilent ? undefined : process.stdout;
|
||||
}
|
||||
|
||||
get stderr(): (NodeJS.WriteStream & { fd: 2 }) | undefined {
|
||||
return this.isSilent ? undefined : process.stderr;
|
||||
}
|
||||
|
||||
setDebug(debug: boolean): this {
|
||||
this.isDebug = debug;
|
||||
return this;
|
||||
|
||||
@ -13,6 +13,9 @@ export interface Logger {
|
||||
get warnings(): number;
|
||||
get errors(): number;
|
||||
|
||||
get stdout(): (NodeJS.WriteStream & { fd: 1 }) | undefined;
|
||||
get stderr(): (NodeJS.WriteStream & { fd: 2 }) | undefined;
|
||||
|
||||
debug(...args: unknown[]): this;
|
||||
info(...args: unknown[]): this;
|
||||
warn(...args: unknown[]): this;
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
import assert from 'node:assert';
|
||||
import { packageManager } from '@strapi/utils';
|
||||
|
||||
import {
|
||||
codemodRepositoryFactory,
|
||||
@ -89,6 +90,7 @@ export class Upgrader implements UpgraderInterface {
|
||||
});
|
||||
|
||||
await this.updateDependencies();
|
||||
await this.installDependencies();
|
||||
|
||||
await this.runCodemods(range);
|
||||
} catch (e) {
|
||||
@ -185,7 +187,18 @@ export class Upgrader implements UpgraderInterface {
|
||||
return strapiDependencies;
|
||||
}
|
||||
|
||||
private async runCodemods(range: Version.Range) {
|
||||
private async installDependencies(): Promise<void> {
|
||||
const projectPath = this.project.cwd;
|
||||
|
||||
const packageManagerName = await packageManager.getPreferred(projectPath);
|
||||
|
||||
await packageManager.installDependencies(projectPath, packageManagerName, {
|
||||
stdout: this.logger?.stdout,
|
||||
stderr: this.logger?.stderr,
|
||||
});
|
||||
}
|
||||
|
||||
private async runCodemods(range: Version.Range): Promise<void> {
|
||||
const repository = codemodRepositoryFactory(
|
||||
codemodRepositoryConstants.INTERNAL_CODEMODS_DIRECTORY
|
||||
);
|
||||
|
||||
58
yarn.lock
58
yarn.lock
@ -9971,6 +9971,7 @@ __metadata:
|
||||
dependencies:
|
||||
"@strapi/pack-up": "workspace:*"
|
||||
"@strapi/types": "npm:4.15.5"
|
||||
"@strapi/utils": "npm:4.15.5"
|
||||
"@types/jscodeshift": "npm:0.11.10"
|
||||
chalk: "npm:4.1.2"
|
||||
cli-table3: "npm:0.6.2"
|
||||
@ -10002,11 +10003,13 @@ __metadata:
|
||||
"@types/node": "npm:18.18.4"
|
||||
date-fns: "npm:2.30.0"
|
||||
eslint-config-custom: "npm:4.15.5"
|
||||
execa: "npm:5.1.1"
|
||||
http-errors: "npm:1.8.1"
|
||||
koa: "npm:2.13.4"
|
||||
koa-body: "npm:4.2.0"
|
||||
lodash: "npm:4.17.21"
|
||||
p-map: "npm:4.0.0"
|
||||
preferred-pm: "npm:3.1.2"
|
||||
tsconfig: "npm:4.15.5"
|
||||
yup: "npm:0.32.9"
|
||||
languageName: unknown
|
||||
@ -18478,6 +18481,16 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"find-yarn-workspace-root2@npm:1.2.16":
|
||||
version: 1.2.16
|
||||
resolution: "find-yarn-workspace-root2@npm:1.2.16"
|
||||
dependencies:
|
||||
micromatch: "npm:^4.0.2"
|
||||
pkg-dir: "npm:^4.2.0"
|
||||
checksum: 398aa473ac245d9c9e9af5a75806b5a6828bd9a759f138faf4666f00c5fcb78af679d43f5cfbe73fe667cf6ec3ef6c9e157b09400181e5b9edc3adc47080e9bb
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"findup-sync@npm:^2.0.0":
|
||||
version: 2.0.0
|
||||
resolution: "findup-sync@npm:2.0.0"
|
||||
@ -19517,6 +19530,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"graceful-fs@npm:^4.1.5":
|
||||
version: 4.2.11
|
||||
resolution: "graceful-fs@npm:4.2.11"
|
||||
checksum: bf152d0ed1dc159239db1ba1f74fdbc40cb02f626770dcd5815c427ce0688c2635a06ed69af364396da4636d0408fcf7d4afdf7881724c3307e46aff30ca49e2
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"grant-koa@npm:5.4.8":
|
||||
version: 5.4.8
|
||||
resolution: "grant-koa@npm:5.4.8"
|
||||
@ -22041,7 +22061,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.1":
|
||||
"js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.0, js-yaml@npm:^3.13.1":
|
||||
version: 3.14.1
|
||||
resolution: "js-yaml@npm:3.14.1"
|
||||
dependencies:
|
||||
@ -23072,6 +23092,18 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"load-yaml-file@npm:^0.2.0":
|
||||
version: 0.2.0
|
||||
resolution: "load-yaml-file@npm:0.2.0"
|
||||
dependencies:
|
||||
graceful-fs: "npm:^4.1.5"
|
||||
js-yaml: "npm:^3.13.0"
|
||||
pify: "npm:^4.0.1"
|
||||
strip-bom: "npm:^3.0.0"
|
||||
checksum: b1bfa7e80114933e43ccc1cf3772582b7e13c8a71dc8d560de2aeecdabf545014daf8a5afabe634c1e9f71c75f6f8528bbd944c9cbbbdf2ab8c927118bd48fd2
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"loader-runner@npm:^4.2.0":
|
||||
version: 4.3.0
|
||||
resolution: "loader-runner@npm:4.3.0"
|
||||
@ -24315,7 +24347,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"micromatch@npm:4.0.5, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5":
|
||||
"micromatch@npm:4.0.5, micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5":
|
||||
version: 4.0.5
|
||||
resolution: "micromatch@npm:4.0.5"
|
||||
dependencies:
|
||||
@ -27058,6 +27090,18 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"preferred-pm@npm:3.1.2":
|
||||
version: 3.1.2
|
||||
resolution: "preferred-pm@npm:3.1.2"
|
||||
dependencies:
|
||||
find-up: "npm:^5.0.0"
|
||||
find-yarn-workspace-root2: "npm:1.2.16"
|
||||
path-exists: "npm:^4.0.0"
|
||||
which-pm: "npm:2.0.0"
|
||||
checksum: d66019f36765c4e241197cd34e2718c03d7eff953b94dacb278df9326767ccc2744d4e0bcab265fd9bb036f704ed5f3909d02594cd5663bd640a160fe4c1446c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"prelude-ls@npm:^1.2.1":
|
||||
version: 1.2.1
|
||||
resolution: "prelude-ls@npm:1.2.1"
|
||||
@ -32585,6 +32629,16 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"which-pm@npm:2.0.0":
|
||||
version: 2.0.0
|
||||
resolution: "which-pm@npm:2.0.0"
|
||||
dependencies:
|
||||
load-yaml-file: "npm:^0.2.0"
|
||||
path-exists: "npm:^4.0.0"
|
||||
checksum: 8f9dc47ab1302d536458a3d28b891907540d67e18b95d8cf0a41ba768b679c2bc7b64c17d9b80c85443c4b300a3e2d5c29ae1e9c7c6ad2833760070fbdbd3b6f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"which-typed-array@npm:^1.1.10, which-typed-array@npm:^1.1.11":
|
||||
version: 1.1.11
|
||||
resolution: "which-typed-array@npm:1.1.11"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user