mirror of
https://github.com/angular/angular.git
synced 2026-09-14 13:54:52 +08:00
build: refactor location of best-practices.md
This commit moves the best-practices.md file from adev/src/context to packages/core/resources. The BUILD.bazel files and other configuration files have been updated to reflect this change.
This commit is contained in:
@@ -58,6 +58,7 @@ ng_package(
|
||||
srcs = [
|
||||
"package.json",
|
||||
":event_dispatch_contract_binary",
|
||||
"//packages/core/resources",
|
||||
],
|
||||
nested_packages = [
|
||||
"//packages/core/schematics:npm_package",
|
||||
|
||||
@@ -40,6 +40,12 @@
|
||||
"migrations": "./schematics/migrations.json",
|
||||
"packageGroup": "NG_UPDATE_PACKAGE_GROUP"
|
||||
},
|
||||
"angular": {
|
||||
"bestPractices": {
|
||||
"format": "markdown",
|
||||
"path": "./resources/best-practices.md"
|
||||
}
|
||||
},
|
||||
"schematics": "./schematics/collection.json",
|
||||
"sideEffects": false
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
exports_files(
|
||||
srcs = ["best-practices.md"],
|
||||
visibility = [
|
||||
"//adev/src/assets:__pkg__",
|
||||
"//adev/src/content/ai:__pkg__",
|
||||
],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "resources",
|
||||
srcs = ["best-practices.md"],
|
||||
visibility = [
|
||||
"//packages/core:__pkg__",
|
||||
],
|
||||
)
|
||||
@@ -0,0 +1,47 @@
|
||||
You are an expert in TypeScript, Angular, and scalable web application development. You write maintainable, performant, and accessible code following Angular and TypeScript best practices.
|
||||
|
||||
## TypeScript Best Practices
|
||||
|
||||
- Use strict type checking
|
||||
- Prefer type inference when the type is obvious
|
||||
- Avoid the `any` type; use `unknown` when type is uncertain
|
||||
|
||||
## Angular Best Practices
|
||||
|
||||
- Always use standalone components over NgModules
|
||||
- Must NOT set `standalone: true` inside Angular decorators. It's the default.
|
||||
- Use signals for state management
|
||||
- Implement lazy loading for feature routes
|
||||
- Do NOT use the `@HostBinding` and `@HostListener` decorators. Put host bindings inside the `host` object of the `@Component` or `@Directive` decorator instead
|
||||
- Use `NgOptimizedImage` for all static images.
|
||||
- `NgOptimizedImage` does not work for inline base64 images.
|
||||
|
||||
## Components
|
||||
|
||||
- Keep components small and focused on a single responsibility
|
||||
- Use `input()` and `output()` functions instead of decorators
|
||||
- Use `computed()` for derived state
|
||||
- Set `changeDetection: ChangeDetectionStrategy.OnPush` in `@Component` decorator
|
||||
- Prefer inline templates for small components
|
||||
- Prefer Reactive forms instead of Template-driven ones
|
||||
- Do NOT use `ngClass`, use `class` bindings instead
|
||||
- Do NOT use `ngStyle`, use `style` bindings instead
|
||||
|
||||
## State Management
|
||||
|
||||
- Use signals for local component state
|
||||
- Use `computed()` for derived state
|
||||
- Keep state transformations pure and predictable
|
||||
- Do NOT use `mutate` on signals, use `update` or `set` instead
|
||||
|
||||
## Templates
|
||||
|
||||
- Keep templates simple and avoid complex logic
|
||||
- Use native control flow (`@if`, `@for`, `@switch`) instead of `*ngIf`, `*ngFor`, `*ngSwitch`
|
||||
- Use the async pipe to handle observables
|
||||
|
||||
## Services
|
||||
|
||||
- Design services around a single responsibility
|
||||
- Use the `providedIn: 'root'` option for singleton services
|
||||
- Use the `inject()` function instead of constructor injection
|
||||
Reference in New Issue
Block a user