Path aliases simplify paths by giving a link to the path rather than using the the full relative path.
// before: import { SharedModule } from '../../shared/shared.module'; import { DatePipe } from '../../../date.pipe'; import { environment } from '../../../environments/environment'; // after: import { SharedModule } from '@shared/shared.module'; import { DatePipe } from '@shared/pipes/date.pipe'; import { environment } from '@env/environment';
Path aliases are relative to compilerOptions.baseUrl. By default this is set to "./" so all path aliases we create must be fully qualified from the baseUrl.
Create the Aliases
This documentation uses a json program to modify the tsconfig.json file to simplify editing for everyone.
Run this command to install the json program:
json --version || sudo npm install -g json json -f tsconfig.json -I -c "this.baseUrl = './'" json -f tsconfig.json -I -c "this.compilerOptions.paths = {}" json -f tsconfig.json -I -e "this.compilerOptions.paths['@app/*'] = ['src/app/*']" json -f tsconfig.json -I -e "this.compilerOptions.paths['@core/*'] = ['src/app/core/*']" json -f tsconfig.json -I -e "this.compilerOptions.paths['@shared/*'] = ['src/app/shared/*']" json -f tsconfig.json -I -e "this.compilerOptions.paths['@env/*'] = ['src/environments/*']"
After our changes:
/* globally accessible app code (in every feature module) */ import { SomeSingletonService } from '@app/core'; import { environment } from '@env/environment'; /* localy accessible feature module code, always use relative path */ import { ExampleService } from './example.service';
tsconfig.json after the execution of the CLI commands:
{ "compilerOptions": { ..., "baseUrl": "./", "paths": { "@app/*": [ "src/app/*" ], "@core/*": [ "src/app/core/*" ], "@shared/*": [ "src/app/shared/*" ], "@env/*": [ "src/environments/*" ] } } }