feat(core): simplify the migrate command and provide more info about it

This commit is contained in:
Victor Savkin 2019-12-12 11:28:28 -05:00 committed by Victor Savkin
parent a82737968b
commit a99eefed24

View File

@ -268,12 +268,6 @@ function parseMigrationsOptions(
}) })
); );
if (!options.runMigrations) { if (!options.runMigrations) {
if (!args[0]) {
throw new Error(
`Specify the package name (e.g., ${commandName} migrate mypackage@1.2.3)`
);
}
let from = {}; let from = {};
if (options.from) { if (options.from) {
options.from.split(',').forEach(p => { options.from.split(',').forEach(p => {
@ -292,14 +286,18 @@ function parseMigrationsOptions(
let targetPackage; let targetPackage;
let targetVersion; let targetVersion;
if (args[0].lastIndexOf('@') > 0) { if (args[0] && args[0].indexOf('@') > 1) {
const i = args[0].lastIndexOf('@'); const i = args[0].lastIndexOf('@');
targetPackage = args[0].substring(0, i); targetPackage = args[0].substring(0, i);
targetVersion = args[0].substring(i + 1); targetVersion = args[0].substring(i + 1);
} else if (args[0]) {
targetPackage = '@nrwl/workspace';
targetVersion = args[0];
} else { } else {
targetPackage = args[0]; targetPackage = '@nrwl/workspace';
targetVersion = 'latest'; targetVersion = 'latest';
} }
return { return {
type: 'generateMigrations', type: 'generateMigrations',
targetPackage, targetPackage,
@ -389,6 +387,7 @@ function createFetcher(logger: logging.Logger) {
return cache[`${packageName}-${packageVersion}`]; return cache[`${packageName}-${packageVersion}`];
}; };
} }
// testing-fetch-end // testing-fetch-end
function createMigrationsFile(root: string, migrations: any[]) { function createMigrationsFile(root: string, migrations: any[]) {
@ -431,38 +430,56 @@ async function generateMigrationsJsonAndUpdatePackageJson(
to: { [p: string]: string }; to: { [p: string]: string };
} }
) { ) {
logger.info(`Fetching meta data about packages.`); try {
logger.info(`It may take a few minutes.`); logger.info(`Fetching meta data about packages.`);
const migrator = new Migrator({ logger.info(`It may take a few minutes.`);
versions: versions(root, opts.from), const migrator = new Migrator({
fetch: createFetcher(logger), versions: versions(root, opts.from),
from: opts.from, fetch: createFetcher(logger),
to: opts.to from: opts.from,
}); to: opts.to
const { migrations, packageJson } = await migrator.updatePackageJson( });
opts.targetPackage, const { migrations, packageJson } = await migrator.updatePackageJson(
opts.targetVersion opts.targetPackage,
); opts.targetVersion
updatePackageJson(root, packageJson);
if (migrations.length > 0) {
createMigrationsFile(root, migrations);
logger.info(`The migrate command has run successfully.`);
logger.info(`- package.json has been updated`);
logger.info(`- migrations.json has been generated`);
logger.info(`Next steps:`);
logger.info(
`- Make sure package.json changes make sense and then run 'npm install' or 'yarn'`
); );
logger.info(`- Run 'nx migrate --run-migrations=migrations.json'`); updatePackageJson(root, packageJson);
} else {
logger.info(`The migrate command has run successfully.`); if (migrations.length > 0) {
logger.info(`- package.json has been updated`); createMigrationsFile(root, migrations);
logger.info(
`- there are no migrations to run, so migrations.json has not been created.` logger.info(`The migrate command has run successfully.`);
logger.info(`- package.json has been updated`);
logger.info(`- migrations.json has been generated`);
logger.info(`Next steps:`);
logger.info(
`- Make sure package.json changes make sense and then run 'npm install' or 'yarn'`
);
logger.info(`- Run 'nx migrate --run-migrations=migrations.json'`);
} else {
logger.info(`The migrate command has run successfully.`);
logger.info(`- package.json has been updated`);
logger.info(
`- there are no migrations to run, so migrations.json has not been created.`
);
}
} catch (e) {
const startVersion = versions(root, {})('@nrwl/workspace');
logger.error(
`The migrate command failed. Try the following to migrate your workspace:`
); );
logger.error(`> npm install --save-dev @nrwl/workspace@latest`);
logger.error(
`> nx migrate ${opts.targetPackage}@${opts.targetVersion} --from="@nrwl/workspace@${startVersion}"`
);
logger.error(
`This will use the newest version of the migrate functionality, which might have your issue resolved.`
);
logger.error(
`----------------------------------------------------------------------------------------------------`
);
throw e;
} }
} }
@ -470,6 +487,7 @@ class MigrationEngineHost extends NodeModulesEngineHost {
constructor() { constructor() {
super(); super();
} }
protected _resolveCollectionPath(name: string): string { protected _resolveCollectionPath(name: string): string {
let collectionPath: string | undefined = undefined; let collectionPath: string | undefined = undefined;