Angular a11y CDK:能否仅导入所需部分而非整个库?
Great question—this is a common concern when working with Angular libraries that have large feature sets. Let’s break down both parts of your query clearly:
1. Is there a way to import only the specific features we need?
Yes, technically you can import directly from internal subpaths of the Angular CDK a11y package. For example, instead of importing from the top-level @angular/cdk/a11y, you can target the exact files where FocusableOption and FocusKeyManager are defined:
import { FocusableOption } from '@angular/cdk/a11y/focus-key-manager'; import { FocusKeyManager } from '@angular/cdk/a11y/focus-key-manager'; // Note: Depending on your CDK version, you might need to adjust the path—check the `node_modules/@angular/cdk/a11y` directory to confirm the exact structure
2. Does importing via non-public API paths violate development best practices?
Short answer: Yes, it’s generally discouraged. Here’s why:
- Breaking change risk: The Angular team only guarantees backward compatibility for the public API (top-level exports from
@angular/cdk/a11yand other official entry points). Internal subpaths and file structures can change without warning in major or even minor CDK updates, which could break your code unexpectedly when upgrading. - Maintainability: Other developers on your team may not be familiar with these internal paths, making the code harder to understand and debug. Sticking to the public API keeps your codebase aligned with Angular’s recommended patterns.
A Smarter Alternative: Trust Tree Shaking
Before switching to internal imports, consider this: modern build tools (Webpack, Rollup, Vite) support tree shaking, which automatically strips unused code from your final bundle. Even if you import from @angular/cdk/a11y, any a11y features you don’t use won’t end up in your production build—provided your project is configured correctly:
- Ensure you’re using ES modules (not CommonJS) for imports.
- Enable production mode in your Angular CLI build configuration (this enables tree shaking by default).
This way, you get the stability of the public API without worrying about unnecessary code bloat.
内容的提问来源于stack exchange,提问作者Daryll Santos

