cleanup(misc): add known preset dependencies before generating it (#15459)

This commit is contained in:
Leosvel Pérez Espinosa 2023-03-14 15:46:45 +00:00 committed by GitHub
parent 46bc6af3c2
commit 87833b913e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 111 additions and 65 deletions

View File

@ -1,23 +1,6 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP // Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`new --preset angular-monorepo should generate necessary npm dependencies 1`] = ` exports[`new --preset should generate necessary npm dependencies for empty preset 1`] = `
Object {
"dependencies": Object {
"@nrwl/angular": "0.0.1",
},
"devDependencies": Object {
"@nrwl/workspace": "0.0.1",
"nx": "0.0.1",
},
"license": "MIT",
"name": "my-workspace",
"private": true,
"scripts": Object {},
"version": "0.0.0",
}
`;
exports[`new --preset empty should generate necessary npm dependencies 1`] = `
Object { Object {
"dependencies": Object {}, "dependencies": Object {},
"devDependencies": Object { "devDependencies": Object {
@ -32,22 +15,6 @@ Object {
} }
`; `;
exports[`new --preset react-monorepo should generate necessary npm dependencies 1`] = `
Object {
"dependencies": Object {},
"devDependencies": Object {
"@nrwl/react": "0.0.1",
"@nrwl/workspace": "0.0.1",
"nx": "0.0.1",
},
"license": "MIT",
"name": "my-workspace",
"private": true,
"scripts": Object {},
"version": "0.0.0",
}
`;
exports[`new should generate an empty nx.json 1`] = ` exports[`new should generate an empty nx.json 1`] = `
Object { Object {
"$schema": "./node_modules/nx/schemas/nx-schema.json", "$schema": "./node_modules/nx/schemas/nx-schema.json",

View File

@ -4,7 +4,11 @@ import {
Tree, Tree,
} from '@nrwl/devkit'; } from '@nrwl/devkit';
import { Preset } from '../utils/presets'; import { Preset } from '../utils/presets';
import { nxVersion } from '../../utils/versions'; import {
angularCliVersion,
nxVersion,
typescriptVersion,
} from '../../utils/versions';
import { getNpmPackageVersion } from '../utils/get-npm-package-version'; import { getNpmPackageVersion } from '../utils/get-npm-package-version';
import { NormalizedSchema } from './new'; import { NormalizedSchema } from './new';
import { join } from 'path'; import { join } from 'path';
@ -20,10 +24,7 @@ export function addPresetDependencies(host: Tree, options: NormalizedSchema) {
) { ) {
return; return;
} }
const { dependencies, dev } = getPresetDependencies( const { dependencies, dev } = getPresetDependencies(options);
options.preset,
options.presetVersion
);
return addDependenciesToPackageJson( return addDependenciesToPackageJson(
host, host,
dependencies, dependencies,
@ -86,29 +87,51 @@ export function generatePreset(host: Tree, opts: NormalizedSchema) {
} }
} }
function getPresetDependencies(preset: string, version?: string) { function getPresetDependencies({
preset,
presetVersion,
bundler,
}: NormalizedSchema) {
switch (preset) { switch (preset) {
case Preset.TS: case Preset.TS:
return { dependencies: {}, dev: { '@nrwl/js': nxVersion } }; return { dependencies: {}, dev: { '@nrwl/js': nxVersion } };
case Preset.AngularMonorepo: case Preset.AngularMonorepo:
case Preset.AngularStandalone: case Preset.AngularStandalone:
return { dependencies: { '@nrwl/angular': nxVersion }, dev: {} }; return {
dependencies: { '@nrwl/angular': nxVersion },
dev: {
'@angular-devkit/core': angularCliVersion,
'@angular-devkit/schematics': angularCliVersion,
'@schematics/angular': angularCliVersion,
typescript: typescriptVersion,
},
};
case Preset.Express: case Preset.Express:
return { dependencies: {}, dev: { '@nrwl/express': nxVersion } }; return { dependencies: {}, dev: { '@nrwl/express': nxVersion } };
case Preset.Nest: case Preset.Nest:
return { dependencies: {}, dev: { '@nrwl/nest': nxVersion } }; return {
dependencies: {},
dev: { '@nrwl/nest': nxVersion, typescript: typescriptVersion },
};
case Preset.NextJs: case Preset.NextJs:
return { dependencies: { '@nrwl/next': nxVersion }, dev: {} }; return { dependencies: { '@nrwl/next': nxVersion }, dev: {} };
case Preset.ReactMonorepo: case Preset.ReactMonorepo:
return { dependencies: {}, dev: { '@nrwl/react': nxVersion } };
case Preset.ReactStandalone: case Preset.ReactStandalone:
return { dependencies: {}, dev: { '@nrwl/react': nxVersion } }; return {
dependencies: {},
dev: {
'@nrwl/react': nxVersion,
'@nrwl/cypress': nxVersion,
'@nrwl/jest': bundler !== 'vite' ? nxVersion : undefined,
'@nrwl/vite': bundler === 'vite' ? nxVersion : undefined,
'@nrwl/webpack': bundler === 'webpack' ? nxVersion : undefined,
},
};
case Preset.ReactNative: case Preset.ReactNative:
return { dependencies: {}, dev: { '@nrwl/react-native': nxVersion } }; return { dependencies: {}, dev: { '@nrwl/react-native': nxVersion } };
@ -117,7 +140,10 @@ function getPresetDependencies(preset: string, version?: string) {
return { dependencies: {}, dev: { '@nrwl/expo': nxVersion } }; return { dependencies: {}, dev: { '@nrwl/expo': nxVersion } };
case Preset.WebComponents: case Preset.WebComponents:
return { dependencies: {}, dev: { '@nrwl/web': nxVersion } }; return {
dependencies: {},
dev: { '@nrwl/web': nxVersion, typescript: typescriptVersion },
};
case Preset.NodeServer: case Preset.NodeServer:
return { dependencies: {}, dev: { '@nrwl/node': nxVersion } }; return { dependencies: {}, dev: { '@nrwl/node': nxVersion } };
@ -125,7 +151,9 @@ function getPresetDependencies(preset: string, version?: string) {
default: { default: {
return { return {
dev: {}, dev: {},
dependencies: { [preset]: version ?? getNpmPackageVersion(preset) }, dependencies: {
[preset]: presetVersion ?? getNpmPackageVersion(preset),
},
}; };
} }
} }

View File

@ -1,8 +1,14 @@
import { createTree } from '@nrwl/devkit/testing';
import { readJson, Tree, writeJson } from '@nrwl/devkit'; import { readJson, Tree, writeJson } from '@nrwl/devkit';
import { newGenerator, NormalizedSchema } from './new'; import { createTree } from '@nrwl/devkit/testing';
import { Linter } from '../../utils/lint'; import { Linter } from '../../utils/lint';
import {
angularCliVersion,
nxVersion,
prettierVersion,
typescriptVersion,
} from '../../utils/versions';
import { Preset } from '../utils/presets'; import { Preset } from '../utils/presets';
import { newGenerator, NormalizedSchema } from './new';
const defaultOptions: Omit< const defaultOptions: Omit<
NormalizedSchema, NormalizedSchema,
@ -33,22 +39,62 @@ describe('new', () => {
}); });
describe('--preset', () => { describe('--preset', () => {
describe.each([ it('should generate necessary npm dependencies for empty preset', async () => {
[Preset.Empty], await newGenerator(tree, {
[Preset.AngularMonorepo], ...defaultOptions,
[Preset.ReactMonorepo], name: 'my-workspace',
])('%s', (preset) => { directory: 'my-workspace',
it('should generate necessary npm dependencies', async () => { npmScope: 'npmScope',
await newGenerator(tree, { appName: 'app',
...defaultOptions, preset: Preset.Empty,
name: 'my-workspace', });
directory: 'my-workspace',
npmScope: 'npmScope',
appName: 'app',
preset,
});
expect(readJson(tree, 'my-workspace/package.json')).toMatchSnapshot(); expect(readJson(tree, 'my-workspace/package.json')).toMatchSnapshot();
});
it('should generate necessary npm dependencies for react preset', async () => {
await newGenerator(tree, {
...defaultOptions,
name: 'my-workspace',
directory: 'my-workspace',
npmScope: 'npmScope',
appName: 'app',
preset: Preset.ReactMonorepo,
bundler: 'vite',
});
const { devDependencies } = readJson(tree, 'my-workspace/package.json');
expect(devDependencies).toStrictEqual({
'@nrwl/react': nxVersion,
'@nrwl/cypress': nxVersion,
'@nrwl/vite': nxVersion,
'@nrwl/workspace': nxVersion,
nx: nxVersion,
});
});
it('should generate necessary npm dependencies for angular preset', async () => {
await newGenerator(tree, {
...defaultOptions,
name: 'my-workspace',
directory: 'my-workspace',
npmScope: 'npmScope',
appName: 'app',
preset: Preset.AngularMonorepo,
});
const { devDependencies, dependencies } = readJson(
tree,
'my-workspace/package.json'
);
expect(dependencies).toStrictEqual({ '@nrwl/angular': nxVersion });
expect(devDependencies).toStrictEqual({
'@angular-devkit/core': angularCliVersion,
'@angular-devkit/schematics': angularCliVersion,
'@nrwl/workspace': nxVersion,
'@schematics/angular': angularCliVersion,
nx: nxVersion,
typescript: typescriptVersion,
}); });
}); });
}); });

View File

@ -1,7 +1,11 @@
export const nxVersion = require('../../package.json').version; export const nxVersion = require('../../package.json').version;
export const angularCliVersion = '~15.2.0';
export const typescriptVersion = '~4.9.5'; export const typescriptVersion = '~4.9.5';
export const typescriptESLintVersion = '^5.36.1'; export const typescriptESLintVersion = '^5.36.1';
export const eslintVersion = '~8.15.0'; export const eslintVersion = '~8.15.0';
export const eslintConfigPrettierVersion = '8.1.0'; export const eslintConfigPrettierVersion = '8.1.0';
// TODO: remove when preset generation is reworked and
// deps are not installed from workspace
export const angularCliVersion = '~15.2.0';
export const prettierVersion = '^2.6.2';

View File

@ -34,6 +34,7 @@ function check() {
'packages/workspace/src/core/file-command-line-utils.ts', 'packages/workspace/src/core/file-command-line-utils.ts',
'packages/workspace/src/generators/preset/preset.ts', 'packages/workspace/src/generators/preset/preset.ts',
'packages/workspace/src/generators/new/generate-preset.ts', 'packages/workspace/src/generators/new/generate-preset.ts',
'packages/workspace/src/generators/new/new.spec.ts',
'packages/workspace/src/generators/init/init.ts', 'packages/workspace/src/generators/init/init.ts',
'packages/workspace/src/migrations/update-8-3-0/update-8-3-0.spec.ts', 'packages/workspace/src/migrations/update-8-3-0/update-8-3-0.spec.ts',
'packages/workspace/src/migrations/update-8-3-0/update-ng-cli-8-1.ts', 'packages/workspace/src/migrations/update-8-3-0/update-ng-cli-8-1.ts',