diff --git a/docs/angular/api-node/schematics/library.md b/docs/angular/api-node/schematics/library.md index 34bc00a7b0..e429ca41b2 100644 --- a/docs/angular/api-node/schematics/library.md +++ b/docs/angular/api-node/schematics/library.md @@ -80,6 +80,14 @@ Type: `boolean` Create a publishable library. +### rootDir + +Alias(es): srcRootForCompilationRoot + +Type: `string` + +Sets the rootDir for TypeScript compilation. When not defined, it uses the project's root property, or srcRootForCompilationRoot if it is defined. + ### skipFormat Default: `false` diff --git a/docs/node/api-node/schematics/library.md b/docs/node/api-node/schematics/library.md index 24867910f1..5fc3b9d683 100644 --- a/docs/node/api-node/schematics/library.md +++ b/docs/node/api-node/schematics/library.md @@ -80,6 +80,14 @@ Type: `boolean` Create a publishable library. +### rootDir + +Alias(es): srcRootForCompilationRoot + +Type: `string` + +Sets the rootDir for TypeScript compilation. When not defined, it uses the project's root property, or srcRootForCompilationRoot if it is defined. + ### skipFormat Default: `false` diff --git a/docs/react/api-node/schematics/library.md b/docs/react/api-node/schematics/library.md index 24867910f1..5fc3b9d683 100644 --- a/docs/react/api-node/schematics/library.md +++ b/docs/react/api-node/schematics/library.md @@ -80,6 +80,14 @@ Type: `boolean` Create a publishable library. +### rootDir + +Alias(es): srcRootForCompilationRoot + +Type: `string` + +Sets the rootDir for TypeScript compilation. When not defined, it uses the project's root property, or srcRootForCompilationRoot if it is defined. + ### skipFormat Default: `false` diff --git a/package.json b/package.json index d0536c88a2..85a944ebad 100644 --- a/package.json +++ b/package.json @@ -249,4 +249,4 @@ "pre-push": "yarn checkcommit && yarn documentation && pretty-quick --check" } } -} +} \ No newline at end of file diff --git a/packages/node/src/builders/package/package.impl.ts b/packages/node/src/builders/package/package.impl.ts index c84ede3ae4..a7885093b8 100644 --- a/packages/node/src/builders/package/package.impl.ts +++ b/packages/node/src/builders/package/package.impl.ts @@ -19,6 +19,7 @@ export function runNodePackageBuilder( ) { const projGraph = createProjectGraph(); const libRoot = projGraph.nodes[context.target.project].data.root; + const normalizedOptions = normalizeOptions(options, context, libRoot); const { target, dependencies } = calculateProjectDependencies( projGraph, diff --git a/packages/node/src/builders/package/utils/compile-typescript-files.ts b/packages/node/src/builders/package/utils/compile-typescript-files.ts index e7860f36a2..20fb4c9bab 100644 --- a/packages/node/src/builders/package/utils/compile-typescript-files.ts +++ b/packages/node/src/builders/package/utils/compile-typescript-files.ts @@ -70,6 +70,7 @@ export default function compileTypeScriptFiles( const tsconfig = readTsConfig(tsConfigPath); tsconfig.options.outDir = options.normalizedOutputPath; + if (options.srcRootForCompilationRoot) { tsconfig.options.rootDir = options.srcRootForCompilationRoot; } else { diff --git a/packages/node/src/schematics/library/library.spec.ts b/packages/node/src/schematics/library/library.spec.ts index 0c7e406505..9916fc3ef8 100644 --- a/packages/node/src/schematics/library/library.spec.ts +++ b/packages/node/src/schematics/library/library.spec.ts @@ -37,6 +37,19 @@ describe('lib', () => { }); }); + it('adds srcRootForCompilationRoot in workspace.json', async () => { + const tree = await runSchematic( + 'lib', + { name: 'myLib', rootDir: './src', buildable: true }, + appTree + ); + const workspaceJson = readJsonInTree(tree, '/workspace.json'); + expect( + workspaceJson.projects['my-lib'].architect.build.options + .srcRootForCompilationRoot + ).toEqual('./src'); + }); + it('should update nx.json', async () => { const tree = await runSchematic( 'lib', diff --git a/packages/node/src/schematics/library/library.ts b/packages/node/src/schematics/library/library.ts index 6650698833..baef95527d 100644 --- a/packages/node/src/schematics/library/library.ts +++ b/packages/node/src/schematics/library/library.ts @@ -126,6 +126,10 @@ function addProject(options: NormalizedSchema): Rule { assets: [`${options.projectRoot}/*.md`], }, }; + + if (options.rootDir) { + architect.build.options.srcRootForCompilationRoot = options.rootDir; + } } return json; }); diff --git a/packages/node/src/schematics/library/schema.d.ts b/packages/node/src/schematics/library/schema.d.ts index c8531f9aa2..623cd6409f 100644 --- a/packages/node/src/schematics/library/schema.d.ts +++ b/packages/node/src/schematics/library/schema.d.ts @@ -12,4 +12,5 @@ export interface Schema { publishable?: boolean; importPath?: string; testEnvironment: 'jsdom' | 'node'; + rootDir?: string; } diff --git a/packages/node/src/schematics/library/schema.json b/packages/node/src/schematics/library/schema.json index 6d494d23de..d9de90e458 100644 --- a/packages/node/src/schematics/library/schema.json +++ b/packages/node/src/schematics/library/schema.json @@ -64,6 +64,11 @@ "type": "string", "description": "The library name used to import it, like @myorg/my-awesome-lib. Must be a valid npm name." }, + "rootDir": { + "type": "string", + "alias": "srcRootForCompilationRoot", + "description": "Sets the rootDir for TypeScript compilation. When not defined, it uses the project's root property, or srcRootForCompilationRoot if it is defined." + }, "testEnvironment": { "type": "string", "enum": ["jsdom", "node"],