Workspace Schematics: importing a TS file outside the "tools" directory causes a TS error
See original GitHub issueExpected Behavior
I should be able to import a TS file from an app or lib into my custom workspace schematic and use it.
Current Behavior
When I try importing a file from an app or lib into my custom schematic, I get a 'rootDir' is expected to contain all source files
TS error.
Failure Information (for bugs)
Steps to Reproduce
The specific steps to reproduce are as follows:
- Create a new workspace via
npx create-nx-workspace@latest schematics-playground
- Select
Angular
as the type of workspace - During the process it asks for the name of the first app, set it to
default
- Create a
test
schematic viang g workspace-schematic test
- Inside the
index.ts
file for that schematic, import theapp.module.ts
for thedefault
app that was generated (or really any file that requires traversal outside of thetools
directory) - Run the schematic via
./node_modules/.bin/nx workspace-schematic test
Context
nx report
@nrwl/angular : 9.0.2
@nrwl/cli : 9.0.2
@nrwl/cypress : 9.0.2
@nrwl/eslint-plugin-nx : Not Found
@nrwl/express : Not Found
@nrwl/jest : 9.0.2
@nrwl/linter : Not Found
@nrwl/nest : Not Found
@nrwl/next : Not Found
@nrwl/node : Not Found
@nrwl/react : Not Found
@nrwl/schematics : Not Found
@nrwl/tao : 9.0.2
@nrwl/web : Not Found
@nrwl/workspace : 9.0.2
typescript : 3.7.5
Reproduction
A minimal reproduction of the error can be found here.
This was generated using the exact steps outlined in “Steps to Reproduce”.
Just install dependencies and run the test
schematic via nx workspace-schematic test
.
Failure Logs
In the repro I am trying to import the AppModule
from apps/default/src/app/app.module.ts
into my schematic at tools/schematics/test/index.ts
and it results in this error:
apps/default/src/app/app.module.ts:4:30 - error TS6059: File '/Users/Garve/projects/schematics-playground/apps/default/src/app/app.component.ts' is not under 'rootDir' '/Users/Garve/projects/schematics-playground/tools'. 'rootDir' is expected to contain all source files.
4 import { AppComponent } from './app.component';
~~~~~~~~~~~~~~~~~
tools/schematics/test/index.ts:4:27 - error TS6059: File '/Users/Garve/projects/schematics-playground/apps/default/src/app/app.module.ts' is not under 'rootDir' '/Users/Garve/projects/schematics-playground/tools'. 'rootDir' is expected to contain all source files.
4 import { AppModule } from '../../../apps/default/src/app/app.module';
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Found 2 errors.
Other
For reference, here is the resulting structure of the dist
folder when I run the schematic and get the error:
Almost positive the error is coming from this function, because I tried running the tsc -p tools/tsconfig.tools.json
command myself and got the same error.
Issue Analytics
- State:
- Created 4 years ago
- Reactions:12
- Comments:22 (5 by maintainers)
I found that templated ts files in the generator/schematic were being compiled when they shouldn’t be.
They had been excluded in tsconfig.base.json as
"exclude": ["node_modules", "tmp", "tools/schematics/*/files/*]"
, which no longer worked becauseschematics
was renamed togenerators
in NX 11.I updated tsconfig.base.json to exclude
tools/**/files/*
instead to fix the issue. It would be nice if these exclusions were added with the creation of a generator, and also added to the migration scripts.Same on our side, we have a bash script to do the copy and need to rerun it each time we need to propagate a change from generator A to generator B (generator B using generator A)