mirror of
https://github.com/strapi/strapi.git
synced 2025-11-14 17:19:01 +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 logger from './logger';
|
||||||
import type { Options } from '../types';
|
import type { Options } from '../types';
|
||||||
|
|
||||||
|
// TODO: Refactor run install, use the methods available in @strapi/utils instead
|
||||||
export function runInstall(path: string, { useYarn }: Options = {}) {
|
export function runInstall(path: string, { useYarn }: Options = {}) {
|
||||||
return execa(useYarn ? 'yarn' : 'npm', ['install'], {
|
return execa(useYarn ? 'yarn' : 'npm', ['install'], {
|
||||||
cwd: path,
|
cwd: path,
|
||||||
|
|||||||
@ -42,14 +42,16 @@
|
|||||||
"test:ts": "run -T tsc --noEmit",
|
"test:ts": "run -T tsc --noEmit",
|
||||||
"test:unit": "run -T jest",
|
"test:unit": "run -T jest",
|
||||||
"test:unit:watch": "run -T jest --watch",
|
"test:unit:watch": "run -T jest --watch",
|
||||||
"watch": "run -T pack-up watch"
|
"watch": "pack-up watch"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@sindresorhus/slugify": "1.1.0",
|
"@sindresorhus/slugify": "1.1.0",
|
||||||
"date-fns": "2.30.0",
|
"date-fns": "2.30.0",
|
||||||
|
"execa": "5.1.1",
|
||||||
"http-errors": "1.8.1",
|
"http-errors": "1.8.1",
|
||||||
"lodash": "4.17.21",
|
"lodash": "4.17.21",
|
||||||
"p-map": "4.0.0",
|
"p-map": "4.0.0",
|
||||||
|
"preferred-pm": "3.1.2",
|
||||||
"yup": "0.32.9"
|
"yup": "0.32.9"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
@ -44,6 +44,7 @@ import * as file from './file';
|
|||||||
import * as traverse from './traverse';
|
import * as traverse from './traverse';
|
||||||
import webhook from './webhook';
|
import webhook from './webhook';
|
||||||
import { isOperator, isOperatorOfType } from './operators';
|
import { isOperator, isOperatorOfType } from './operators';
|
||||||
|
import * as packageManager from './package-manager';
|
||||||
|
|
||||||
export {
|
export {
|
||||||
parseMultipartData,
|
parseMultipartData,
|
||||||
@ -95,4 +96,5 @@ export {
|
|||||||
webhook,
|
webhook,
|
||||||
isOperator,
|
isOperator,
|
||||||
isOperatorOfType,
|
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"
|
"watch": "pack-up watch"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@strapi/utils": "4.15.5",
|
||||||
"chalk": "4.1.2",
|
"chalk": "4.1.2",
|
||||||
"cli-table3": "0.6.2",
|
"cli-table3": "0.6.2",
|
||||||
"commander": "8.3.0",
|
"commander": "8.3.0",
|
||||||
|
|||||||
@ -33,6 +33,14 @@ export class Logger implements LoggerInterface {
|
|||||||
return this.nbWarningsCalls;
|
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 {
|
setDebug(debug: boolean): this {
|
||||||
this.isDebug = debug;
|
this.isDebug = debug;
|
||||||
return this;
|
return this;
|
||||||
|
|||||||
@ -13,6 +13,9 @@ export interface Logger {
|
|||||||
get warnings(): number;
|
get warnings(): number;
|
||||||
get errors(): number;
|
get errors(): number;
|
||||||
|
|
||||||
|
get stdout(): (NodeJS.WriteStream & { fd: 1 }) | undefined;
|
||||||
|
get stderr(): (NodeJS.WriteStream & { fd: 2 }) | undefined;
|
||||||
|
|
||||||
debug(...args: unknown[]): this;
|
debug(...args: unknown[]): this;
|
||||||
info(...args: unknown[]): this;
|
info(...args: unknown[]): this;
|
||||||
warn(...args: unknown[]): this;
|
warn(...args: unknown[]): this;
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import assert from 'node:assert';
|
import assert from 'node:assert';
|
||||||
|
import { packageManager } from '@strapi/utils';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
codemodRepositoryFactory,
|
codemodRepositoryFactory,
|
||||||
@ -89,6 +90,7 @@ export class Upgrader implements UpgraderInterface {
|
|||||||
});
|
});
|
||||||
|
|
||||||
await this.updateDependencies();
|
await this.updateDependencies();
|
||||||
|
await this.installDependencies();
|
||||||
|
|
||||||
await this.runCodemods(range);
|
await this.runCodemods(range);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@ -185,7 +187,18 @@ export class Upgrader implements UpgraderInterface {
|
|||||||
return strapiDependencies;
|
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(
|
const repository = codemodRepositoryFactory(
|
||||||
codemodRepositoryConstants.INTERNAL_CODEMODS_DIRECTORY
|
codemodRepositoryConstants.INTERNAL_CODEMODS_DIRECTORY
|
||||||
);
|
);
|
||||||
|
|||||||
58
yarn.lock
58
yarn.lock
@ -9971,6 +9971,7 @@ __metadata:
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@strapi/pack-up": "workspace:*"
|
"@strapi/pack-up": "workspace:*"
|
||||||
"@strapi/types": "npm:4.15.5"
|
"@strapi/types": "npm:4.15.5"
|
||||||
|
"@strapi/utils": "npm:4.15.5"
|
||||||
"@types/jscodeshift": "npm:0.11.10"
|
"@types/jscodeshift": "npm:0.11.10"
|
||||||
chalk: "npm:4.1.2"
|
chalk: "npm:4.1.2"
|
||||||
cli-table3: "npm:0.6.2"
|
cli-table3: "npm:0.6.2"
|
||||||
@ -10002,11 +10003,13 @@ __metadata:
|
|||||||
"@types/node": "npm:18.18.4"
|
"@types/node": "npm:18.18.4"
|
||||||
date-fns: "npm:2.30.0"
|
date-fns: "npm:2.30.0"
|
||||||
eslint-config-custom: "npm:4.15.5"
|
eslint-config-custom: "npm:4.15.5"
|
||||||
|
execa: "npm:5.1.1"
|
||||||
http-errors: "npm:1.8.1"
|
http-errors: "npm:1.8.1"
|
||||||
koa: "npm:2.13.4"
|
koa: "npm:2.13.4"
|
||||||
koa-body: "npm:4.2.0"
|
koa-body: "npm:4.2.0"
|
||||||
lodash: "npm:4.17.21"
|
lodash: "npm:4.17.21"
|
||||||
p-map: "npm:4.0.0"
|
p-map: "npm:4.0.0"
|
||||||
|
preferred-pm: "npm:3.1.2"
|
||||||
tsconfig: "npm:4.15.5"
|
tsconfig: "npm:4.15.5"
|
||||||
yup: "npm:0.32.9"
|
yup: "npm:0.32.9"
|
||||||
languageName: unknown
|
languageName: unknown
|
||||||
@ -18478,6 +18481,16 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
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":
|
"findup-sync@npm:^2.0.0":
|
||||||
version: 2.0.0
|
version: 2.0.0
|
||||||
resolution: "findup-sync@npm:2.0.0"
|
resolution: "findup-sync@npm:2.0.0"
|
||||||
@ -19517,6 +19530,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
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":
|
"grant-koa@npm:5.4.8":
|
||||||
version: 5.4.8
|
version: 5.4.8
|
||||||
resolution: "grant-koa@npm:5.4.8"
|
resolution: "grant-koa@npm:5.4.8"
|
||||||
@ -22041,7 +22061,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
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
|
version: 3.14.1
|
||||||
resolution: "js-yaml@npm:3.14.1"
|
resolution: "js-yaml@npm:3.14.1"
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -23072,6 +23092,18 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
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":
|
"loader-runner@npm:^4.2.0":
|
||||||
version: 4.3.0
|
version: 4.3.0
|
||||||
resolution: "loader-runner@npm:4.3.0"
|
resolution: "loader-runner@npm:4.3.0"
|
||||||
@ -24315,7 +24347,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
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
|
version: 4.0.5
|
||||||
resolution: "micromatch@npm:4.0.5"
|
resolution: "micromatch@npm:4.0.5"
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -27058,6 +27090,18 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
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":
|
"prelude-ls@npm:^1.2.1":
|
||||||
version: 1.2.1
|
version: 1.2.1
|
||||||
resolution: "prelude-ls@npm:1.2.1"
|
resolution: "prelude-ls@npm:1.2.1"
|
||||||
@ -32585,6 +32629,16 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
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":
|
"which-typed-array@npm:^1.1.10, which-typed-array@npm:^1.1.11":
|
||||||
version: 1.1.11
|
version: 1.1.11
|
||||||
resolution: "which-typed-array@npm:1.1.11"
|
resolution: "which-typed-array@npm:1.1.11"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user