This project was generated with Angular CLI version 18.0.1.
- Clone only the remote primary HEAD (default: origin/master)
 
git clone <url> --single-branch- Only specific branch
 
git clone <url> --branch <branch> --single-branch [<folder>]git clone <url> --branch <branch>- 
Cloning repositories using degit
- master branch is default.
 
 
npx degit github:user/repo#branch-name <folder-name>- Cloning this project with skeleton
 
git clone https://github.com/actionanand/fake-server.git --branch 1-skeleton angular-proj-namenpx degit github:actionanand/fake-server#1-skeleton angular-proj-name- Install the compatible node version
 
  nvm install v20.13.1- 
Install and Configure Prettier
- Install prettier as below:
 
yarn add prettier -D
- Create a 
.prettierrcfile and write down the format as below: - online ref 
trailingComma: 'all' tabWidth: 2 useTabs: false semi: true singleQuote: true bracketSpacing: true bracketSameLine: true arrowParens: 'avoid' printWidth: 120 overrides: - files: - '*.js' - '*.jsx' options: bracketSpacing: true jsxSingleQuote: true semi: true singleQuote: true tabWidth: 2 useTabs: false - files: - '*.ts' options: tabWidth: 2
- Create a 
.prettierignorefile and write as below(sample) 
# Ignore artifacts: build coverage e2e node_modules dist dest reports # Ignore files *.lock package-lock.json yarn.lock
 - 
Install
Es Lint, if not installed 
ng add @angular-eslint/schematicsif error comes, use the below command
ng add @angular-eslint/schematics@next- Configure pre-commit hooks
 
Pre-commit hooks are a nice way to run certain checks to ensure clean code. This can be used to format staged files if for some reason they weren’t automatically formatted during editing. husky can be used to easily configure git hooks to prevent bad commits. We will use this along with pretty-quick to run Prettier on our changed files. Install these packages, along with npm-run-all, which will make it easier for us to run npm scripts:
yarn add husky pretty-quick npm-run-all -DTo configure the pre-commit hook, simply add a precommit npm script. We want to first run Prettier, then run TSLint on the formatted files. To make our scripts cleaner, I am using the npm-run-all package, which gives you two commands, run-s to run scripts in sequence, and run-p to run scripts in parallel:
  "precommit": "run-s format:fix lint",
  "format:fix": "pretty-quick --staged",
  "format:check": "prettier --config ./.prettierrc --list-different \"src/{app,environments,assets}/**/*{.ts,.js,.json,.css,.scss}\"",
  "format:all": "prettier --config ./.prettierrc --write \"src/{app,environments,assets}/**/*{.ts,.js,.json,.css,.scss}\"",
  "lint": "ng lint",- 
Initialize husky
- Run it once
 
npm pkg set scripts.prepare="husky install" npm run prepare
- Add a hook
 
npx husky add .husky/pre-commit "yarn run precommit" npx husky add .husky/pre-commit "yarn test" git add .husky/pre-commit
- Make a commit
 
git commit -m "Keep calm and commit" # `yarn run precommit and yarn test` will run every time you commit
 - 
How to skip prettier format only in particular file
- JS
 
matrix(1, 0, 0, 0, 1, 0, 0, 0, 1); // prettier-ignore matrix( 1, 0, 0, 0, 1, 0, 0, 0, 1 )
- JSX
 
<div> {/* prettier-ignore */} <span ugly format='' /> </div>
- HTML
 
<!-- prettier-ignore --> <div class="x" >hello world</div > <!-- prettier-ignore-attribute --> <div (mousedown)=" onStart ( ) " (mouseup)=" onEnd ( ) "></div> <!-- prettier-ignore-attribute (mouseup) --> <div (mousedown)="onStart()" (mouseup)=" onEnd ( ) "></div>
- CSS
 
/* prettier-ignore */ .my ugly rule { }
- Markdown
 
<!-- prettier-ignore --> Do not format this- YAML
 
# prettier-ignore key : value hello: world
- For more, please check
 
 
When working with Signal effects, you sometimes might need to perform some cleanup work before the effect function runs again (e.g., to clear some timer or something like that).
Angular's effect() allows you to do that!
It does provide you with an onCleanup hook which you can execute as part of your effect function to define what should happen before the effect code runs the next time:
effect(onCleanup => {
  const tasks = getTasks();
  const timer = setTimeout(() => {
    console.log(`Current number of tasks: ${tasks().length}`);
  }, 1000);
  onCleanup(() => {
    clearTimeout(timer);
  });
});