рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЕрдорд╛рдиреНрдп рдХреЛрдб рдХреЛ рдХреИрд╕реЗ рдЫреЛрдбрд╝реЗрдВ

рдХреНрдпреЛрдВ рдЬрд░реВрд░реА рд╣реИ?


рдЬрдм рдЖрдкрдХреА рдЯреАрдо рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╡реНрдпрдХреНрддрд┐ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдЯреАрдо рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рджрд╕реНрдп рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреЛрдбрд┐рдВрдЧ рд╕реНрдЯрд╛рдЗрд▓ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдХреЛрдИ рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрд╖реНрдардХ рд▓рд┐рдЦрддрд╛ рд╣реИ if...else, рддреЛ рдХреЛрдИ рдирд╣реАрдВред рдЬрдм рдХреЛрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдбрд╝реА рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ рдкрдврд╝рдирд╛ рдФрд░ рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рднреА рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред


рддрд╛рдХрд┐ рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдФрд░ рдЕрдиреНрдп рдЯреАрдо рдХреА рдмреИрдардХ рдКрдВрдЪреЗ рд╕реНрд╡рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЯреИрдм рдмрдирд╛рдо рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреА рдЪрд░реНрдЪрд╛ рдореЗрдВ рди рдмрджрд▓ рдЬрд╛рдП, рдЗрд╕рд▓рд┐рдП рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рддрд╛рдХрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЦреБрдж рд╣реА рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рди рджреЗ рдЬреЛ рдХрд┐ рдЯреАрдо рдХреЗ рд▓рд┐рдП рдЕрдорд╛рдиреНрдп рдФрд░ рдЧреИрд░-рдорд╛рдирдХ рд╣реЛред


рдПрдХ рддрд░рдл, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреЛрдбрд┐рдВрдЧ рд╢реИрд▓рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВред рдареАрдХ рд╣реИ, рдЬреВрди рд╢рд░реНрдд рдХреЗ рдмрд╛рдж рдХреЛрдб рдХреА рдПрдХ рднреА рдкрдВрдХреНрддрд┐ рдирд╣реАрдВ рд▓рдкреЗрдЯрддрд╛ рд╣реИ if, рд▓реЗрдХрд┐рди рдХреЛрдИ рд▓рд┐рдЦрддрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛? рдпрджрд┐ рдЖрдк рдЬреВрди рдкреЗрди "рдЬреИрд╕рд╛ рд╣реИ" рдХреЗ рддрд╣рдд рдХреЛрдб рдЫреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ "рдЯрд╛рдЗрдо рдмрдо" рдмрди рд╕рдХрддрд╛ рд╣реИ: рдХреЛрдб рдХреА рдЙрд╕ рд▓рд╛рдЗрди рдХреЛ ifрдЙрд╕рдХреЗ рдмрд╛рдж рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЕрдЧрд▓реА рд▓рд╛рдЗрди рд╢рд░реНрдд рдХреЗ рддрд╣рдд рдЖ рдЬрд╛рдПрдЧреАред рдмреЗрд╢рдХ, рдпрд╣ рд╕реНрдерд┐рддрд┐ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ рдкрдХрдбрд╝реА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрднрд╛рд╡рд┐рдд рдмрдЧ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рджреЛ рдореБрдЦреНрдп рдХрд╛рд░рдг рд╣реИрдВ:


  1. рд╣рдо рд╕рднреА рд▓реЛрдЧ рд╣реИрдВ, рдФрд░ рд▓реЛрдЧ рдЧрд▓рдд рд╣реИрдВред
  2. рд▓реЛрдЧ рд╕рд╛рдорд╛рдЬрд┐рдХ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡реЗ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде "рд╕рдВрдШрд░реНрд╖" рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдФрд░ рдпрд╣рд╛рдВ рджреЛ рд╡рд┐рдХрд▓реНрдк рд╕рдВрднрд╡ рд╣реИрдВ:
    • "рдмреЗрд╣рддрд░ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдареАрдХ рдХрд░реЗрдВ," рд╕рдореАрдХреНрд╖рдХ рд╕реЛрдЪрддрд╛ рд╣реИ, рдФрд░ рдХреЛрдб рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИред
    • рдирд┐рд░реАрдХреНрд╖рдХ рдЬреВрди рдХреЛ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдкрд░реНрдпрд╛рдкреНрддрддрд╛ рдФрд░ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреЗ рд╕рдВрджреЗрд╣ рд╡реНрдпрдХреНрдд рдХрд░рддрд╛ рд╣реИред

рд╣рдо рдпрд╣ рдХреИрд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЯреАрдо рдХреА рд╢реИрд▓реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓рд┐рдЦрддрд╛ рд╣реИ? рд╣рд░ рдмрд╛рд░ рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ рд╣рд╛рдереЛрдВ рдХреЛ рд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЗ рд▓реЗрдЦрдХ рдФрд░ рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рджреЛрдиреЛрдВ рдХреЛ рдЦреБрдж рдХреЛ рдбрд┐рдореЛрдЯ рдХрд░рддрд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдПрдХ рд╡рд░реНрд╖ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рджрд┐рдорд╛рдЧ рдХреЛ рдЙрддреНрддреЗрдЬрд┐рдд рдХрд░рддреА рд╣реИ, рдФрд░ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдорд╛рд░реЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рдХрдИ рдЙрдкрдХрд░рдг рд╣реИрдВред


рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рджреВрд╕рд░реЛрдВ рдФрд░ рдЦреБрдж рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдирд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдореИрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЯреАрдо рдорд╛рдирдХреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрдорд╛рдиреНрдп рдХреЛрдб рд╕реЗ рдЦреБрдж рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИред


рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ


рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рдбреЗрдореЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓реЗрдВ рдЬрд┐рд╕рдХрд╛ рдХреЛрдб GitHub рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЪреВрдВрдХрд┐ рдореИрдВ .NET рдХреЛрд░ рдкрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕ рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдореИрдВ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛:


  • .NET рдХреЛрд░ 3.1
  • рдХреЛрдгреАрдп 8+
  • рдЬреАрдердм рдЦрд╛рддрд╛
  • рдЯреНрд░реИрд╡рд┐рд╕ рд╕реА.рдЖрдИ.

Travis-CI. , .



тАФ , master branch.


" " Gitlab Azure DevOps, Github тАФ Travis CI.



. . , , :


  • . develop master , (maintainer).
  • . CICD , .
  • Repository is a king. gitflow, .
  • Fail fast. , .
  • Git pre-commits hoocks. CI , - .

? -, master develop . , , , "" . " ". , .



solution- (*.sln) , - .NET . , , nuget- .


stylecop .NET Core. , solution- ( gist.github.com):


  1. Directory.build.props тАФ .
  2. standard.ruleset тАФ .
  3. stylecop.json тАФ .

, .



- . : - , . . :


#  
ng lint

#    ,    html-
ng build --prod

#  
ng test

. , (Chrome / Chromium), CI-. , npm- puppeteer , .


, , :


  1. "test-headless-ci-only": "ng test --browsers ChromiumNoSandbox" scripts packages.json:

"scripts": {
    "ng": "ng",
    "start": "ng serve -o",
    "build": "ng build",
    "build-stage": "ng build --configuration=staging",
    "build-prod": "ng build --prod",
    "test": "ng test",
    "test-headless-ci-only": "ng test --browsers ChromiumNoSandbox",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },

  1. npm install puppeteer karma.conf.js :

const process = require("process");
process.env.CHROME_BIN = require("puppeteer").executablePath();

module.exports = function(config) {
  ...
};

  1. karma.conf.js customLaunchers:

config.set({
....,
customLaunchers: {
      ChromiumNoSandbox: {
        base: "ChromeHeadless",
        flags: [
          "--no-sandbox",
          "--headless",
          "--disable-gpu",
          "--disable-translate",
          "--disable-extensions"
        ]
      }
    },
    singleRun: true
});

npm run est-headless-ci-only.



- , . prettierrc, . . prettierrc , :


  1. prettier pretty-quick :

npm install -g prettier
npm install -g pretty-quick

  1. .prettierrc -:

{
    "useTabs": false,
    "printWidth": 120,
    "tabWidth": 2,
    "singleQuote": true,
    "trailingComma": "none",
    "semi": true
}

  1. prettier- .prettierignore -:

package.json
package-lock.json
tslint.json
tsconfig.json
browserslist
.gitkeep
favicon.ico
tsconfig.lib.json
tsconfig.app.json
tsconfig.spec.json
karma.conf.js
protractor.conf.js
ng-package.json
*.html

" " pretty-quick --staged.


-


CI/CD тАФ , . , . . , -, .


husky. , :


  1. husky

npm install -g husky

  1. husk package.json :

"devDependencies": {
  ...
},
"husky": {
    "hooks": {
      "pre-commit": "pretty-quick --staged",
      "pre-push": "ng lint && ng test --browsers ChromiumNoSandbox"
    }
  }

: , , "".



рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрджрдо рдЙрдард╛рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рдЕрдорд╛рдиреНрдп рдХреЛрдб рд╕реЗ "рдЦреБрдж рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ"ред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╕рд┐рд░реНрдл рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рд╕реНрдЯрд╛рдЗрд▓ рдЧрд╛рдЗрдб рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рд╕реЗ рдЙрддреНрдкрд╛рдж рдХреЛ рдХреАрдбрд╝реЗ рд╕реЗ рдмрдЪрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдпреЗ рдЫреЛрдЯреА рдЪреАрдЬреЗрдВ рдмреЗрд╣рддрд░ рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддреБ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ, рдореБрджреНрджреЛрдВ рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдирд╣реАрдВред


All Articles