angular-cli: ng build v6 does not use paths section of root tsconfig.json
Versions
_ _ ____ _ ___
/ \ _ __ __ _ _ _| | __ _ _ __ / ___| | |_ _|
/ △ \ | '_ \ / _` | | | | |/ _` | '__| | | | | | |
/ ___ \| | | | (_| | |_| | | (_| | | | |___| |___ | |
/_/ \_\_| |_|\__, |\__,_|_|\__,_|_| \____|_____|___|
|___/
Angular CLI: 6.0.0-rc.5
Node: 8.11.1
OS: darwin x64
Angular: 6.0.0-rc.5
... animations, cli, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router
Package Version
------------------------------------------------------------
@angular-devkit/architect 0.5.7
@angular-devkit/build-angular 0.5.7
@angular-devkit/build-ng-packagr 0.5.7
@angular-devkit/build-optimizer 0.5.7
@angular-devkit/core 0.5.7
@angular-devkit/schematics 0.5.7
@angular/material 5.2.5
@ngtools/json-schema 1.1.0
@ngtools/webpack 6.0.0-rc.5
@schematics/angular 0.5.7
@schematics/update 0.5.7
rxjs 6.0.0-uncanny-rc.7
typescript 2.7.2
webpack 4.5.0
Repro steps
- Generate a new repository with 2 libraries in
projects/*
. - Library A must import Library B
- Write and run unit test for Library A
- run
ng build
.
Observed behavior
If running ng test
, the project resolves /tsconfig.json
at per each library’s ./project/libraryA/tsconfig.spec.json
. The root tsconfig.json
has an automatically managed paths
block, linked with the output directories.
Running ng build
, it appears that we don’t invoke ng-packagr using that tsconfig.json file, or even resolve the paths
block, resulting in a slew of errors of this sort:
projects/libraryA/src/test.model.ts(18,29): error TS2307: Cannot find module 'libraryB'.
Desired behavior
It should be possible to provide a paths
block for dependency resolution during the build step.
Mention any other details that might be useful (optional)
I’m working through a full migration on a public project here: https://github.com/kangaroo-server/kangaroo-ui/tree/feature/ng6
Repro steps on that repo:
yarn install --pure-lockfile
yarn build # note that it has import failures on @kangaroo/angular-authn
yarn test angular-authn # This works.
About this issue
- Original URL
- State: closed
- Created 6 years ago
- Comments: 16 (2 by maintainers)
Solved the problem in Angular 7 adding the paths to both
tsconfig
filestsconfig.json
helps vscode to works and with intellisensetsconfig.app.json
is also needed for angulartsconfig.json
tsconfig.app.json
and the intellisense works great
I was trying to create a mono repo project and I stumble upon the same issue. After hours of diagnosing the issue, I reached out the same conclusion @krotscheck mentioned. NgPackagr will overwrite
baseUrl
to the entry point, which issrc/public_api
(see line 44).The workaround is manually adding the path to either
tsconfig.json
in root, ortsconfig.lib.json
in lib. I still find this solution weird since the path../../../dist/my-library
is very very relative.one more thing
The same thing well happen if you want to reference your lib in another app, you have to add another path relative to the app directory this time not relative to src. Of course this is not related to ng-packagr. Your tsconfig.json will end up something like this:
IDE Restart required (VSCODE)
I have the same issue but when I look back the whole structure of angular 5 app and I found that there is one more tsc file with name is
tsconfig.app.json
at src folder. it extends fromtsconfig.json
. We need to declare alias paths with the relative path oftsconfig.app.json
instead oftsconfig.json
location. It works properly now.tsconfig.app.json
:{ "extends": "../tsconfig.json", "compilerOptions": { "outDir": "../out-tsc/app", "baseUrl": "./", "paths": { "@shared/components/*": [ "app/shared/*" ], "@shared/services/*": [ "app/services/*" ] }, "module": "es2015", "types": [] }, "exclude": [ "test.ts", "**/*.spec.ts" ] }
if tsconfig.app.json extend tsconfig.json then you only need to add it to tsconfig.json and then restart VSCode. Example with angular8
Confirmed, I’ve got it working, though it required more than just an ‘out-of-the-box’ experience. The changes I needed were:
baseUrl
is overridden tosrc
, so you have to add another../
@hansl - I’d be happy to add this to the library schematic, however I’m not quite certain how to manage paths generation of the
tsconfig.json
file, nor whether it should be done at the root or at the library level. Do you have any guidance?