fix(core): new generator not skipping package installation (#17927)

This commit is contained in:
Denis Frenademetz 2024-01-30 23:11:44 +01:00 committed by GitHub
parent deb0f1a492
commit abafedf8e5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 95 additions and 19 deletions

View File

@ -46,3 +46,34 @@ exports[`new should generate an empty nx.json 1`] = `
},
}
`;
exports[`new should skip install 1`] = `
{
"$schema": "./node_modules/nx/schemas/nx-schema.json",
"namedInputs": {
"default": [
"{projectRoot}/**/*",
"sharedGlobals",
],
"production": [
"default",
],
"sharedGlobals": [],
},
"targetDefaults": {
"build": {
"cache": true,
"dependsOn": [
"^build",
],
"inputs": [
"production",
"^production",
],
},
"lint": {
"cache": true,
},
},
}
`;

View File

@ -1,4 +1,5 @@
import { readJson, Tree, writeJson } from '@nx/devkit';
import * as devkit from '@nx/devkit';
import { createTree } from '@nx/devkit/testing';
import { Linter } from '../../utils/lint';
import {
@ -8,14 +9,10 @@ import {
} from '../../utils/versions';
import { Preset } from '../utils/presets';
import { newGenerator, NormalizedSchema } from './new';
import * as getNpmPackageVersion from './../utils/get-npm-package-version';
import * as generatePreset from './generate-preset';
const DEFAULT_PACKAGE_VERSION = '1.0.0';
jest.mock('./../utils/get-npm-package-version', () => ({
...jest.requireActual<any>('./../utils/get-npm-package-version'),
getNpmPackageVersion: jest
.fn()
.mockImplementation((name, version) => version ?? DEFAULT_PACKAGE_VERSION),
}));
const defaultOptions: Omit<
NormalizedSchema,
@ -29,21 +26,61 @@ const defaultOptions: Omit<
describe('new', () => {
let tree: Tree;
let installPackagesTaskSpy: jest.SpyInstance;
let generatePresetSpy: jest.SpyInstance;
let getNpmPackageVersionSpy: jest.SpyInstance;
beforeEach(() => {
tree = createTree();
// we need an actual path for the package manager version check
tree.root = process.cwd();
installPackagesTaskSpy = jest
.spyOn(devkit, 'installPackagesTask')
.mockImplementation(() => undefined);
generatePresetSpy = jest
.spyOn(generatePreset, 'generatePreset')
.mockImplementation(async () => undefined);
getNpmPackageVersionSpy = jest
.spyOn(getNpmPackageVersion, 'getNpmPackageVersion')
.mockImplementation(
(name, version) => version ?? DEFAULT_PACKAGE_VERSION
);
});
afterEach(() => {
jest.resetAllMocks();
});
it('should generate an empty nx.json', async () => {
await newGenerator(tree, {
...defaultOptions,
name: 'my-workspace',
directory: 'my-workspace',
appName: 'app',
});
await (
await newGenerator(tree, {
...defaultOptions,
name: 'my-workspace',
directory: 'my-workspace',
appName: 'app',
})
)();
expect(readJson(tree, 'my-workspace/nx.json')).toMatchSnapshot();
expect(installPackagesTaskSpy).toHaveBeenCalled();
expect(generatePresetSpy).toHaveBeenCalled();
});
it('should skip install', async () => {
await (
await newGenerator(tree, {
...defaultOptions,
name: 'my-workspace',
directory: 'my-workspace',
appName: 'app',
skipInstall: true,
})
)();
expect(readJson(tree, 'my-workspace/nx.json')).toMatchSnapshot();
expect(installPackagesTaskSpy).not.toHaveBeenCalled();
expect(generatePresetSpy).toHaveBeenCalled();
});
describe('--preset', () => {

View File

@ -50,14 +50,22 @@ export async function newGenerator(tree: Tree, opts: Schema) {
addPresetDependencies(tree, options);
return async () => {
const pmc = getPackageManagerCommand(options.packageManager);
if (pmc.preInstall) {
execSync(pmc.preInstall, {
cwd: joinPathFragments(tree.root, options.directory),
stdio: process.env.NX_GENERATE_QUIET === 'true' ? 'ignore' : 'inherit',
});
if (!options.skipInstall) {
const pmc = getPackageManagerCommand(options.packageManager);
if (pmc.preInstall) {
execSync(pmc.preInstall, {
cwd: joinPathFragments(tree.root, options.directory),
stdio:
process.env.NX_GENERATE_QUIET === 'true' ? 'ignore' : 'inherit',
});
}
installPackagesTask(
tree,
false,
options.directory,
options.packageManager
);
}
installPackagesTask(tree, false, options.directory, options.packageManager);
// TODO: move all of these into create-nx-workspace
if (options.preset !== Preset.NPM && !options.isCustomPreset) {
await generatePreset(tree, options);