feat(js): carry-over known build options (main, tsConfig, etc.) when running setup-build generator (#18742)
This commit is contained in:
parent
960d80be93
commit
226dfaf7a4
@ -641,7 +641,7 @@
|
|||||||
"/packages/esbuild/generators/configuration": {
|
"/packages/esbuild/generators/configuration": {
|
||||||
"description": "Add esbuild configuration to a project.",
|
"description": "Add esbuild configuration to a project.",
|
||||||
"file": "generated/packages/esbuild/generators/configuration.json",
|
"file": "generated/packages/esbuild/generators/configuration.json",
|
||||||
"hidden": true,
|
"hidden": false,
|
||||||
"name": "configuration",
|
"name": "configuration",
|
||||||
"originalFilePath": "/packages/esbuild/src/generators/configuration/schema.json",
|
"originalFilePath": "/packages/esbuild/src/generators/configuration/schema.json",
|
||||||
"path": "/packages/esbuild/generators/configuration",
|
"path": "/packages/esbuild/generators/configuration",
|
||||||
@ -2377,7 +2377,7 @@
|
|||||||
"/packages/rollup/generators/configuration": {
|
"/packages/rollup/generators/configuration": {
|
||||||
"description": "Add rollup configuration to a project.",
|
"description": "Add rollup configuration to a project.",
|
||||||
"file": "generated/packages/rollup/generators/configuration.json",
|
"file": "generated/packages/rollup/generators/configuration.json",
|
||||||
"hidden": true,
|
"hidden": false,
|
||||||
"name": "configuration",
|
"name": "configuration",
|
||||||
"originalFilePath": "/packages/rollup/src/generators/configuration/schema.json",
|
"originalFilePath": "/packages/rollup/src/generators/configuration/schema.json",
|
||||||
"path": "/packages/rollup/generators/configuration",
|
"path": "/packages/rollup/generators/configuration",
|
||||||
|
|||||||
@ -630,7 +630,7 @@
|
|||||||
{
|
{
|
||||||
"description": "Add esbuild configuration to a project.",
|
"description": "Add esbuild configuration to a project.",
|
||||||
"file": "generated/packages/esbuild/generators/configuration.json",
|
"file": "generated/packages/esbuild/generators/configuration.json",
|
||||||
"hidden": true,
|
"hidden": false,
|
||||||
"name": "configuration",
|
"name": "configuration",
|
||||||
"originalFilePath": "/packages/esbuild/src/generators/configuration/schema.json",
|
"originalFilePath": "/packages/esbuild/src/generators/configuration/schema.json",
|
||||||
"path": "esbuild/generators/configuration",
|
"path": "esbuild/generators/configuration",
|
||||||
@ -2351,7 +2351,7 @@
|
|||||||
{
|
{
|
||||||
"description": "Add rollup configuration to a project.",
|
"description": "Add rollup configuration to a project.",
|
||||||
"file": "generated/packages/rollup/generators/configuration.json",
|
"file": "generated/packages/rollup/generators/configuration.json",
|
||||||
"hidden": true,
|
"hidden": false,
|
||||||
"name": "configuration",
|
"name": "configuration",
|
||||||
"originalFilePath": "/packages/rollup/src/generators/configuration/schema.json",
|
"originalFilePath": "/packages/rollup/src/generators/configuration/schema.json",
|
||||||
"path": "rollup/generators/configuration",
|
"path": "rollup/generators/configuration",
|
||||||
|
|||||||
@ -68,8 +68,8 @@
|
|||||||
"presets": []
|
"presets": []
|
||||||
},
|
},
|
||||||
"description": "Add esbuild configuration to a project.",
|
"description": "Add esbuild configuration to a project.",
|
||||||
"hidden": true,
|
|
||||||
"implementation": "/packages/esbuild/src/generators/configuration/configuration.ts",
|
"implementation": "/packages/esbuild/src/generators/configuration/configuration.ts",
|
||||||
|
"hidden": false,
|
||||||
"path": "/packages/esbuild/src/generators/configuration/schema.json",
|
"path": "/packages/esbuild/src/generators/configuration/schema.json",
|
||||||
"type": "generator"
|
"type": "generator"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -70,14 +70,20 @@
|
|||||||
"description": "The build target to add.",
|
"description": "The build target to add.",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"default": "build"
|
"default": "build"
|
||||||
|
},
|
||||||
|
"format": {
|
||||||
|
"description": "The format to build the library (esm or cjs).",
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string", "enum": ["esm", "cjs"] },
|
||||||
|
"default": ["esm"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": [],
|
"required": [],
|
||||||
"presets": []
|
"presets": []
|
||||||
},
|
},
|
||||||
"description": "Add rollup configuration to a project.",
|
"description": "Add rollup configuration to a project.",
|
||||||
"hidden": true,
|
|
||||||
"implementation": "/packages/rollup/src/generators/configuration/configuration.ts",
|
"implementation": "/packages/rollup/src/generators/configuration/configuration.ts",
|
||||||
|
"hidden": false,
|
||||||
"path": "/packages/rollup/src/generators/configuration/schema.json",
|
"path": "/packages/rollup/src/generators/configuration/schema.json",
|
||||||
"type": "generator"
|
"type": "generator"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -47,7 +47,7 @@ describe('Rollup Plugin', () => {
|
|||||||
`generate @nx/rollup:configuration ${myPkg} --target=node --tsConfig=libs/${myPkg}/tsconfig.lib.json --main=libs/${myPkg}/src/index.ts --compiler=swc`
|
`generate @nx/rollup:configuration ${myPkg} --target=node --tsConfig=libs/${myPkg}/tsconfig.lib.json --main=libs/${myPkg}/src/index.ts --compiler=swc`
|
||||||
);
|
);
|
||||||
rmDist();
|
rmDist();
|
||||||
runCLI(`build ${myPkg}`);
|
runCLI(`build ${myPkg} --format=cjs,esm --generateExportsField`);
|
||||||
output = runCommand(`node dist/libs/${myPkg}/index.cjs.js`);
|
output = runCommand(`node dist/libs/${myPkg}/index.cjs.js`);
|
||||||
expect(output).toMatch(/Hello/);
|
expect(output).toMatch(/Hello/);
|
||||||
|
|
||||||
@ -61,7 +61,7 @@ describe('Rollup Plugin', () => {
|
|||||||
`generate @nx/rollup:configuration ${myPkg} --target=node --tsConfig=libs/${myPkg}/tsconfig.lib.json --main=libs/${myPkg}/src/index.ts --compiler=tsc`
|
`generate @nx/rollup:configuration ${myPkg} --target=node --tsConfig=libs/${myPkg}/tsconfig.lib.json --main=libs/${myPkg}/src/index.ts --compiler=tsc`
|
||||||
);
|
);
|
||||||
rmDist();
|
rmDist();
|
||||||
runCLI(`build ${myPkg}`);
|
runCLI(`build ${myPkg} --format=cjs,esm --generateExportsField`);
|
||||||
output = runCommand(`node dist/libs/${myPkg}/index.cjs.js`);
|
output = runCommand(`node dist/libs/${myPkg}/index.cjs.js`);
|
||||||
expect(output).toMatch(/Hello/);
|
expect(output).toMatch(/Hello/);
|
||||||
}, 500000);
|
}, 500000);
|
||||||
|
|||||||
@ -12,8 +12,7 @@
|
|||||||
"aliases": ["esbuild-project"],
|
"aliases": ["esbuild-project"],
|
||||||
"factory": "./src/generators/configuration/configuration#compat",
|
"factory": "./src/generators/configuration/configuration#compat",
|
||||||
"schema": "./src/generators/configuration/schema.json",
|
"schema": "./src/generators/configuration/schema.json",
|
||||||
"description": "Add esbuild configuration to a project.",
|
"description": "Add esbuild configuration to a project."
|
||||||
"hidden": true
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"generators": {
|
"generators": {
|
||||||
@ -28,8 +27,7 @@
|
|||||||
"aliases": ["esbuild-project"],
|
"aliases": ["esbuild-project"],
|
||||||
"factory": "./src/generators/configuration/configuration",
|
"factory": "./src/generators/configuration/configuration",
|
||||||
"schema": "./src/generators/configuration/schema.json",
|
"schema": "./src/generators/configuration/schema.json",
|
||||||
"description": "Add esbuild configuration to a project.",
|
"description": "Add esbuild configuration to a project."
|
||||||
"hidden": true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -51,14 +51,19 @@ function addBuildTarget(tree: Tree, options: EsBuildProjectSchema) {
|
|||||||
version: '0.0.1',
|
version: '0.0.1',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
const tsConfig = getTsConfigFile(tree, options);
|
|
||||||
|
const prevBuildOptions = project.targets?.[options.buildTarget]?.options;
|
||||||
|
|
||||||
|
const tsConfig = prevBuildOptions?.tsConfig ?? getTsConfigFile(tree, options);
|
||||||
|
|
||||||
const buildOptions: EsBuildExecutorOptions = {
|
const buildOptions: EsBuildExecutorOptions = {
|
||||||
main: getMainFile(tree, options),
|
main: prevBuildOptions?.main ?? getMainFile(tree, options),
|
||||||
outputPath: joinPathFragments(
|
outputPath:
|
||||||
'dist',
|
prevBuildOptions?.outputPath ??
|
||||||
project.root === '.' ? options.project : project.root
|
joinPathFragments(
|
||||||
),
|
'dist',
|
||||||
|
project.root === '.' ? options.project : project.root
|
||||||
|
),
|
||||||
outputFileName: 'main.js',
|
outputFileName: 'main.js',
|
||||||
tsConfig,
|
tsConfig,
|
||||||
assets: [],
|
assets: [],
|
||||||
|
|||||||
@ -21,11 +21,14 @@ export async function setupBuildGenerator(
|
|||||||
const tasks: GeneratorCallback[] = [];
|
const tasks: GeneratorCallback[] = [];
|
||||||
const project = readProjectConfiguration(tree, options.project);
|
const project = readProjectConfiguration(tree, options.project);
|
||||||
const buildTarget = options.buildTarget ?? 'build';
|
const buildTarget = options.buildTarget ?? 'build';
|
||||||
|
const prevBuildOptions = project.targets?.[buildTarget]?.options;
|
||||||
|
|
||||||
project.targets ??= {};
|
project.targets ??= {};
|
||||||
|
|
||||||
let mainFile: string;
|
let mainFile: string;
|
||||||
if (options.main) {
|
if (prevBuildOptions?.main) {
|
||||||
|
mainFile = prevBuildOptions.main;
|
||||||
|
} else if (options.main) {
|
||||||
mainFile = options.main;
|
mainFile = options.main;
|
||||||
} else {
|
} else {
|
||||||
const root = project.sourceRoot ?? project.root;
|
const root = project.sourceRoot ?? project.root;
|
||||||
@ -48,7 +51,9 @@ export async function setupBuildGenerator(
|
|||||||
}
|
}
|
||||||
|
|
||||||
let tsConfigFile: string;
|
let tsConfigFile: string;
|
||||||
if (options.tsConfig) {
|
if (prevBuildOptions?.tsConfig) {
|
||||||
|
tsConfigFile = prevBuildOptions.tsConfig;
|
||||||
|
} else if (options.tsConfig) {
|
||||||
tsConfigFile = options.tsConfig;
|
tsConfigFile = options.tsConfig;
|
||||||
} else {
|
} else {
|
||||||
for (const f of [
|
for (const f of [
|
||||||
@ -97,6 +102,7 @@ export async function setupBuildGenerator(
|
|||||||
buildTarget: options.buildTarget,
|
buildTarget: options.buildTarget,
|
||||||
project: options.project,
|
project: options.project,
|
||||||
skipFormat: true,
|
skipFormat: true,
|
||||||
|
skipValidation: true,
|
||||||
});
|
});
|
||||||
tasks.push(task);
|
tasks.push(task);
|
||||||
break;
|
break;
|
||||||
@ -106,9 +112,12 @@ export async function setupBuildGenerator(
|
|||||||
const task = await configurationGenerator(tree, {
|
const task = await configurationGenerator(tree, {
|
||||||
buildTarget: options.buildTarget,
|
buildTarget: options.buildTarget,
|
||||||
main: mainFile,
|
main: mainFile,
|
||||||
|
tsConfig: tsConfigFile,
|
||||||
project: options.project,
|
project: options.project,
|
||||||
skipFormat: true,
|
|
||||||
compiler: 'tsc',
|
compiler: 'tsc',
|
||||||
|
format: ['cjs', 'esm'],
|
||||||
|
skipFormat: true,
|
||||||
|
skipValidation: true,
|
||||||
});
|
});
|
||||||
tasks.push(task);
|
tasks.push(task);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -12,8 +12,7 @@
|
|||||||
"aliases": ["rollup-project"],
|
"aliases": ["rollup-project"],
|
||||||
"factory": "./src/generators/configuration/configuration#compat",
|
"factory": "./src/generators/configuration/configuration#compat",
|
||||||
"schema": "./src/generators/configuration/schema.json",
|
"schema": "./src/generators/configuration/schema.json",
|
||||||
"description": "Add rollup configuration to a project.",
|
"description": "Add rollup configuration to a project."
|
||||||
"hidden": true
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"generators": {
|
"generators": {
|
||||||
@ -28,8 +27,7 @@
|
|||||||
"aliases": ["rollup-project"],
|
"aliases": ["rollup-project"],
|
||||||
"factory": "./src/generators/configuration/configuration",
|
"factory": "./src/generators/configuration/configuration",
|
||||||
"schema": "./src/generators/configuration/schema.json",
|
"schema": "./src/generators/configuration/schema.json",
|
||||||
"description": "Add rollup configuration to a project.",
|
"description": "Add rollup configuration to a project."
|
||||||
"hidden": true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,7 @@ import {
|
|||||||
readJson,
|
readJson,
|
||||||
readProjectConfiguration,
|
readProjectConfiguration,
|
||||||
Tree,
|
Tree,
|
||||||
|
updateProjectConfiguration,
|
||||||
writeJson,
|
writeJson,
|
||||||
} from '@nx/devkit';
|
} from '@nx/devkit';
|
||||||
import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing';
|
import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing';
|
||||||
@ -99,4 +100,46 @@ describe('configurationGenerator', () => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should carry over known executor options from existing build target', async () => {
|
||||||
|
updateProjectConfiguration(tree, 'mypkg', {
|
||||||
|
root: 'libs/mypkg',
|
||||||
|
sourceRoot: 'libs/mypkg/src',
|
||||||
|
targets: {
|
||||||
|
build: {
|
||||||
|
executor: '@nx/js:tsc',
|
||||||
|
options: {
|
||||||
|
main: 'libs/mypkg/src/custom.ts',
|
||||||
|
outputPath: 'dist/custom',
|
||||||
|
tsConfig: 'libs/mypkg/src/tsconfig.custom.json',
|
||||||
|
additionalEntryPoints: ['libs/mypkg/src/extra.ts'],
|
||||||
|
generateExportsField: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
await configurationGenerator(tree, {
|
||||||
|
project: 'mypkg',
|
||||||
|
buildTarget: 'build',
|
||||||
|
skipValidation: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
const project = readProjectConfiguration(tree, 'mypkg');
|
||||||
|
|
||||||
|
expect(project.targets).toMatchObject({
|
||||||
|
build: {
|
||||||
|
executor: '@nx/rollup:rollup',
|
||||||
|
outputs: ['{options.outputPath}'],
|
||||||
|
defaultConfiguration: 'production',
|
||||||
|
options: {
|
||||||
|
main: 'libs/mypkg/src/custom.ts',
|
||||||
|
outputPath: 'dist/custom',
|
||||||
|
tsConfig: 'libs/mypkg/src/tsconfig.custom.json',
|
||||||
|
additionalEntryPoints: ['libs/mypkg/src/extra.ts'],
|
||||||
|
generateExportsField: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -50,19 +50,30 @@ function addBuildTarget(tree: Tree, options: RollupProjectSchema) {
|
|||||||
version: '0.0.1',
|
version: '0.0.1',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
const tsConfig =
|
|
||||||
options.tsConfig ?? joinPathFragments(project.root, 'tsconfig.lib.json');
|
const prevBuildOptions = project.targets?.[options.buildTarget]?.options;
|
||||||
|
|
||||||
const buildOptions: RollupExecutorOptions = {
|
const buildOptions: RollupExecutorOptions = {
|
||||||
main: options.main ?? joinPathFragments(project.root, 'src/main.ts'),
|
main:
|
||||||
outputPath: joinPathFragments(
|
options.main ??
|
||||||
'dist',
|
prevBuildOptions?.main ??
|
||||||
project.root === '.' ? project.name : project.root
|
joinPathFragments(project.root, 'src/main.ts'),
|
||||||
),
|
outputPath:
|
||||||
|
prevBuildOptions?.outputPath ??
|
||||||
|
joinPathFragments(
|
||||||
|
'dist',
|
||||||
|
project.root === '.' ? project.name : project.root
|
||||||
|
),
|
||||||
|
tsConfig:
|
||||||
|
options.tsConfig ??
|
||||||
|
prevBuildOptions?.tsConfig ??
|
||||||
|
joinPathFragments(project.root, 'tsconfig.lib.json'),
|
||||||
|
additionalEntryPoints: prevBuildOptions?.additionalEntryPoints,
|
||||||
|
generateExportsField: prevBuildOptions?.generateExportsField,
|
||||||
compiler: options.compiler ?? 'babel',
|
compiler: options.compiler ?? 'babel',
|
||||||
tsConfig,
|
|
||||||
project: `${project.root}/package.json`,
|
project: `${project.root}/package.json`,
|
||||||
external: options.external,
|
external: options.external,
|
||||||
|
format: options.format,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (options.rollupConfig) {
|
if (options.rollupConfig) {
|
||||||
|
|||||||
@ -10,4 +10,5 @@ export interface RollupProjectSchema {
|
|||||||
external?: string[];
|
external?: string[];
|
||||||
rollupConfig?: string;
|
rollupConfig?: string;
|
||||||
buildTarget?: string;
|
buildTarget?: string;
|
||||||
|
format?: ('cjs' | 'esm')[];
|
||||||
}
|
}
|
||||||
|
|||||||
@ -71,6 +71,15 @@
|
|||||||
"description": "The build target to add.",
|
"description": "The build target to add.",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"default": "build"
|
"default": "build"
|
||||||
|
},
|
||||||
|
"format": {
|
||||||
|
"description": "The format to build the library (esm or cjs).",
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["esm", "cjs"]
|
||||||
|
},
|
||||||
|
"default": ["esm"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": []
|
"required": []
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user