VueJS+TS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ SonarQube เชธเชพเชฅเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซเช‚

เช…เชฎเซ‡ เช…เชฎเชพเชฐเชพ เช•เชพเชฐเซเชฏเชฎเชพเช‚ เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎเชจเซ‹ เชธเช•เซเชฐเชฟเชฏเชชเชฃเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช เชธเซ‹เชจเชพเชฐเช•เซเชฏเซ‚เชฌ เช‰เชšเซเชš เชธเซเชคเชฐ เชชเชฐ เช•เซ‹เชก เช—เซเชฃเชตเชคเซเชคเชพ เชœเชพเชณเชตเชตเชพ เชฎเชพเชŸเซ‡. เชฎเชพเช‚ เชฒเช–เซ‡เชฒเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเซเชธเชฎเชพเช‚เชฅเซ€ เชเช•เชจเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ VueJs+Typescript, เชธเชฎเชธเซเชฏเชพเช“ เชŠเชญเซ€ เชฅเชˆ. เชคเซ‡เชฅเซ€, เชนเซเช‚ เชคเชฎเชจเซ‡ เชตเชงเซ เชตเชฟเช—เชคเชตเชพเชฐ เชœเชฃเชพเชตเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚ เช•เซ‡ เช…เชฎเซ‡ เชคเซ‡เชฎเชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชนเชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เชธเชซเชณ เชฅเชฏเชพ.

VueJS+TS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ SonarQube เชธเชพเชฅเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซเช‚

เช† เชฒเซ‡เช–เชฎเชพเช‚ เช†เชชเชฃเซ‡ เชตเชพเชค เช•เชฐเซ€เชถเซเช‚, เชœเซ‡เชฎ เชฎเซ‡เช‚ เช‰เชชเชฐ เชฒเช–เซเชฏเซเช‚ เช›เซ‡, SonarQube เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชตเชฟเชถเซ‡. เชเช• เชจเชพเชจเซ‹ เชธเชฟเชฆเซเชงเชพเช‚เชค - เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชคเซ‡ เชถเซเช‚ เช›เซ‡, เชœเซ‡เช“ เชคเซ‡เชจเชพ เชตเชฟเชถเซ‡ เชชเซเชฐเชฅเชฎ เชตเช–เชค เชธเชพเช‚เชญเชณเซ‡ เช›เซ‡ เชคเซ‡เชฎเชจเชพ เชฎเชพเชŸเซ‡:

เชธเซ‹เชจเชพเชฐเช•เซเชฏเซ‚เชฌ (เชญเซ‚เชคเชชเซ‚เชฐเซเชต เชธเซ‹เชจเชพเชฐ) เชธเชคเชค เชจเชฟเชฐเซ€เช•เซเชทเชฃ เช…เชจเซ‡ เช•เซ‹เชก เช—เซเชฃเชตเชคเซเชคเชพ เชฎเชพเชชเชจ เชฎเชพเชŸเซ‡ เชเช• เช“เชชเชจ เชธเซ‹เชฐเซเชธ เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เช›เซ‡.
MISRA C, MISRA C++, MITER/CWE เช…เชจเซ‡ CERT เชธเชฟเช•เซเชฏเซ‹เชฐ เช•เซ‹เชกเชฟเช‚เช— เชธเซเชŸเชพเชจเซเชกเชฐเซเชกเซเชธ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช— เชงเซ‹เชฐเชฃเซ‹เชจเชพ เชจเชฟเชฏเชฎเซ‹ เช…เชจเซเชธเชพเชฐ เช•เซ‹เชก เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช…เชจเซ‡ เชญเซ‚เชฒ เชถเซ‹เชงเชจเซ‡ เชธเชชเซ‹เชฐเซเชŸ เช•เชฐเซ‡ เช›เซ‡. เชคเซ‡ OWASP เชŸเซ‹เชช 10 เช…เชจเซ‡ CWE/SANS เชŸเซ‹เชช 25 เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช— เชญเซ‚เชฒเซ‹เชจเซ€ เชธเซ‚เชšเชฟเชฎเชพเช‚เชฅเซ€ เชญเซ‚เชฒเซ‹เชจเซ‡ เชชเชฃ เช“เชณเช–เซ€ เชถเช•เซ‡ เช›เซ‡.
เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชตเชฟเชตเชฟเชง เชคเซˆเชฏเชพเชฐ เชธเชพเชงเชจเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡ เชนเช•เซ€เช•เชค เชนเซ‹เชตเชพ เช›เชคเชพเช‚, SonarQube เชฐเชจเชจเซ‹ เช‡เชคเชฟเชนเชพเชธ เชฐเชพเช–เซ€เชจเซ‡ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชจเซ‡ เชเช• เชœ เชกเซ‡เชถเชฌเซ‹เชฐเซเชก เชชเชฐ เช˜เชŸเชพเชกเซ€ เชฆเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡ เชฐเซ€เชคเซ‡ เชคเชฎเชจเซ‡ เชตเชฟเช•เชพเชธ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชธเซ‹เชซเซเชŸเชตเซ‡เชฐเชจเซ€ เช—เซเชฃเชตเชคเซเชคเชพเชฎเชพเช‚ เชซเซ‡เชฐเชซเชพเชฐเชจเซ‹ เชธเชพเชฎเชพเชจเซเชฏ เชตเชฒเชฃ เชœเซ‹เชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡.

เชตเชงเซ เชตเชฟเช—เชคเซ‹ เชชเชฐ เชฎเชณเซ€ เชถเช•เซ‡ เช›เซ‡ เชธเชคเซเชคเชพเชตเชพเชฐ เชตเซ‡เชฌเชธเชพเช‡เชŸ

เชฎเซ‹เชŸเซ€ เชธเช‚เช–เซเชฏเชพเชฎเชพเช‚ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช— เชญเชพเชทเชพเช“ เชธเชชเซ‹เชฐเซเชŸเซ‡เชก เช›เซ‡. เช‰เชชเชฐเชจเซ€ เชฒเชฟเช‚เช• เชชเชฐเชฅเซ€ เชฎเชณเซ‡เชฒเซ€ เชฎเชพเชนเชฟเชคเซ€เชจเซ‡ เช†เชงเชพเชฐเซ‡, เช† 25 เชฅเซ€ เชตเชงเซ เชญเชพเชทเชพเช“ เช›เซ‡. เชšเซ‹เช•เซเช•เชธ เชญเชพเชทเชพเชจเซ‡ เชธเชฎเชฐเซเชฅเชจ เช†เชชเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชฏเซ‹เช—เซเชฏ เชชเซเชฒเช—เช‡เชจ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเซเช‚ เช†เชตเชถเซเชฏเช• เช›เซ‡. เชธเชฎเซเชฆเชพเชฏ เชธเช‚เชธเซเช•เชฐเชฃเชฎเชพเช‚ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชชเซเชฒเช—เช‡เชจ เชถเชพเชฎเซ‡เชฒ เช›เซ‡ เชœเชพเชตเชพเชธเซเช•เซเชฐเชฟเชชเซเชŸ (typeัript เชธเชนเชฟเชค), เชœเซ‹เช•เซ‡ เชตเชฟเช•เชฟ เชตเชฟเชฐเซเชฆเซเชง เช•เชนเซ‡ เช›เซ‡. เชชเชพเช›เชณ เชœเชพเชตเชพเชธเซเช•เซเชฐเชฟเชชเซเชŸ เชชเซเชฒเช—เช‡เชจ เชœเชตเชพเชฌเซ‹ เชธเซ‹เชจเชพเชฐเชœเซ‡เชเชธ, Typescript เชฎเชพเชŸเซ‡ SonarTS เช…เชจเซเช•เซเชฐเชฎเซ‡.

เชธเชคเซเชคเชพเชตเชพเชฐ เช•เซเชฒเชพเชฏเช‚เชŸเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชตเชฐเซ‡เชœ เชฎเชพเชนเชฟเชคเซ€ เชฎเซ‹เช•เชฒเชตเชพ เชฎเชพเชŸเซ‡ เชฅเชพเชฏ เช›เซ‡ เชธเซ‹เชจเชพเชฐเซเช•เซเชฏเซเชฌ-เชธเซเช•เซ‡เชจเชฐ, เชœเซ‡เชฎเชพเช‚เชฅเซ€ เชธเซ‡เชŸเชฟเช‚เช—เซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพ-เชซเชพเชˆเชฒ, เช† เชกเซ‡เชŸเชพ เชธเชฐเซเชตเชฐเชจเซ‡ เชฎเซ‹เช•เชฒเซ‡ เช›เซ‡ เชธเซ‹เชจเชพเชฐเช•เซเชฏเซ‚เชฌ เชตเชงเซ เชเช•เชคเซเชฐเซ€เช•เชฐเชฃ เช…เชจเซ‡ เชเช•เชคเซเชฐเซ€เช•เชฐเชฃ เชฎเชพเชŸเซ‡.

เชฎเชพเชŸเซ‡ เชœเชพเชตเชพเชธเซเช•เซเชฐเชฟเชชเซเชŸ เช›เซ‡ เชเชจเชชเซ€เชเชฎ เชฐเซ‡เชชเชฐ. เชคเซ‡เชฅเซ€, เชšเชพเชฒเซ‹ เชชเช—เชฒเซเช‚-เชฆเชฐ-เชชเช—เชฒเชพเช‚ เช…เชฎเชฒเซ€เช•เชฐเชฃ เชถเชฐเซ‚ เช•เชฐเซ€เช เชธเซ‹เชจเชพเชฐเช•เซเชฏเซ‚เชฌ ะฒ เชตเซเชฏเซ- เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชŸเชพเช‡เชชเชธเซเช•เซเชฐเชฟเชชเซเชŸ.

เชธเชฐเซเชตเชฐ เชœเชฎเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชธเซ‹เชจเชพเชฐเช•เซเชฏเซ‚เชฌ เชšเชพเชฒเซ‹ เชฒเชพเชญ เชฒเชˆเช เชกเซ‹เช•เชฐ-เช•เช‚เชชเซ‹เช.

เชธเซ‹เชจเชพเชฐ.เชฏเชพเชฎเชฒ:

version: '1'
    services:
        simplesample-sonar:
            image: sonarqube:lts
            ports:
                - 9001:9000
                - 9092:9092
            network_mode: bridge

เชฒเซ‹เชจเซเชš:

docker-compose -f sonar.yml up

เชคเซ‡ เชชเช›เซ€ เชธเซ‹เชจเชพเชฐเช•เซเชฏเซ‚เชฌ เช…เชนเซ€เช‚ เช‰เชชเชฒเชฌเซเชง เชฅเชถเซ‡: http://localhost:9001 .

VueJS+TS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ SonarQube เชธเชพเชฅเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซเช‚
เชคเซ‡เชฎเชพเช‚ เชนเชœเซ€ เชธเซเชงเซ€ เช•เซ‹เชˆ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชจเชฅเซ€ เช…เชจเซ‡ เชคเซ‡ เชตเชพเชœเชฌเซ€ เช›เซ‡. เช…เชฎเซ‡ เช† เชธเซเชฅเชฟเชคเชฟ เชธเซเชงเชพเชฐเซ€เชถเซเช‚. เชฎเซ‡เช‚ เชฎเชพเชŸเซ‡ เชธเชคเซเชคเชพเชตเชพเชฐ เช‰เชฆเชพเชนเชฐเชฃ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฒเซ€เชงเซ‹ VueJS+TS+เชœเซ‡เชธเซเชŸ. เชšเชพเชฒเซ‹ เชคเซ‡เชจเซ‡ เช†เชชเชฃเซ€ เชคเชฐเชซ เชตเชพเชณเซ€เช:

git clone https://github.com/vuejs/vue-test-utils-typescript-example.git

เชชเซเชฐเชฅเชฎ เช†เชชเชฃเซ‡ เช•เซเชฒเชพเชฏเช‚เชŸ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชธเซ‹เชจเชพเชฐเช•เซเชฏเซ‚เชฌ, เชœเซ‡เชจเซ‡ เช•เชนเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชธเซ‹เชจเชพเชฐ-เชธเซเช•เซ‡เชจเชฐเชฎเชพเชŸเซ‡ npm เชคเซเชฏเชพเช‚ เชเช• เช†เชตเชฐเชฃ เช›เซ‡:

yarn add sonarqube-scanner

เช…เชจเซ‡ เชคเชฐเชค เชœ เช†เชฆเซ‡เชถ เช‰เชฎเซ‡เชฐเซ‹ เชธเซเช•เซเชฐเชฟเชชเซเชŸเซเชธ เชคเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡.

package.json:

{
 โ€ฆ 
   scripts: {
      ...
      "sonar": "sonar-scanner"
      ...
   },
 โ€ฆ
}

เช†เช—เชณ, เชธเซเช•เซ‡เชจเชฐ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชตเชฟเชถเชฟเชทเซเชŸ เชซเชพเช‡เชฒเชฎเชพเช‚ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชธเซ‡เชŸ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชšเชพเชฒเซ‹ เชฎเซ‚เชณเชญเซ‚เชค เชธเชพเชฅเซ‡ เชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซ€เช.

sonar-project.properties:

sonar.host.url=http://localhost:9001

sonar.projectKey=test-project-vuejs-ts
sonar.projectName=Test Application (VueJS+TS)

sonar.sources=src
# sonar.tests=
sonar.test.inclusions=src/**/*tests*/**
sonar.sourceEncoding=UTF-8

  • sonar.host.url - เชธเชฐเชจเชพเชฎเซเช‚ เชธเซ‹เชจเชพเชฐ'เช;
  • sonar.projectKey - เชธเชฐเซเชตเชฐ เชชเชฐ เช…เชจเชจเซเชฏ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช“เชณเช–เช•เชฐเซเชคเชพ เชธเซ‹เชจเชพเชฐ'เช;
  • sonar.projectName - เชคเซ‡เชจเซเช‚ เชจเชพเชฎ, เชคเซ‡ เช•เซ‹เชˆเชชเชฃ เชธเชฎเชฏเซ‡ เชฌเชฆเชฒเซ€ เชถเช•เชพเชฏ เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฆเซเชตเชพเชฐเชพ เช“เชณเช–เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเช•เซ€;
  • เชธเซ‹เชจเชพเชฐ.เชธเซ‹เชฐเซเชธ - เชธเซเชคเซเชฐเซ‹เชคเซ‹ เชธเชพเชฅเซ‡ เชซเซ‹เชฒเซเชกเชฐ, เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เช† เชธเซเชฐเซ‹เชค, เชชเชฐเช‚เชคเซ เช•เช‚เชˆเชชเชฃ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡. เช† เชซเซ‹เชฒเซเชกเชฐ เชฐเซ‚เชŸ เชซเซ‹เชฒเซเชกเชฐเชจเซ€ เชคเซเชฒเชจเชพเชฎเชพเช‚ เชธเซ‡เชŸ เช•เชฐเซ‡เชฒ เช›เซ‡, เชœเซ‡ เชคเซ‡ เชซเซ‹เชฒเซเชกเชฐ เช›เซ‡ เชœเซ‡เชฎเชพเช‚เชฅเซ€ เชธเซเช•เซ‡เชจเชฐ เชฒเซ‹เช‚เชš เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡;
  • เชธเซ‹เชจเชพเชฐ.เชชเชฐเซ€เช•เซเชทเชฃเซ‹ - เชเช• เชชเชฐเชฟเชฎเชพเชฃ เชœเซ‡ เชชเชพเช›เชฒเชพ เชเช• เชธเชพเชฅเซ‡ เช…เชจเซเชธเช‚เชงเชพเชจเชฎเชพเช‚ เชœเชพเชฏ เช›เซ‡. เช† เชคเซ‡ เชซเซ‹เชฒเซเชกเชฐ เช›เซ‡ เชœเซเชฏเชพเช‚ เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชธเซเชฅเชฟเชค เช›เซ‡. เช† เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚, เชเชตเซเช‚ เช•เซ‹เชˆ เชซเซ‹เชฒเซเชกเชฐ เชจเชฅเซ€, เช…เชจเซ‡ เชŸเซ‡เชธเซเชŸ เชซเซ‹เชฒเซเชกเชฐเชฎเชพเช‚ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชคเชพ เช˜เชŸเช•เชจเซ€ เชฌเชพเชœเซเชฎเชพเช‚ เชธเซเชฅเชฟเชค เช›เซ‡.เชŸเซ‡เชธเซเชŸ', เชคเซ‡เชฅเซ€ เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เชนเชฎเชฃเชพเช‚ เชฎเชพเชŸเซ‡ เช…เชตเช—เชฃเซ€เชถเซเช‚ เช…เชจเซ‡ เช†เช—เชพเชฎเซ€ เชชเชฐเชฟเชฎเชพเชฃเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚;
  • เชธเซ‹เชจเชพเชฐ.เชŸเซ‡เชธเซเชŸ.เชธเชฎเชพเชตเซ‡เชถ - เชฎเชพเชธเซเช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชฎเชพเชŸเซ‡เชจเซ‹ เชฎเชพเชฐเซเช—, เช…เชฒเซเชชเชตเชฟเชฐเชพเชฎ เชฆเซเชตเชพเชฐเชพ เชตเชฟเชญเชพเชœเชฟเชค เชธเซ‚เชšเชฟเชฌเชฆเซเชง เช˜เชฃเชพ เช˜เชŸเช•เซ‹ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡;
  • sonar.sourceEncoding - เชธเซเชคเซเชฐเซ‹เชค เชซเชพเช‡เชฒเซ‹ เชฎเชพเชŸเซ‡ เชเชจเซเช•เซ‹เชกเชฟเช‚เช—.

เชธเซเช•เซ‡เชจเชฐเชจเชพ เชชเซเชฐเชฅเชฎ เชชเซเชฐเช•เซเชทเซ‡เชชเชฃ เชฎเชพเชŸเซ‡, เชฎเซเช–เซเชฏ เชชเซ‚เชฐเซเชตเชตเชฐเซเชคเซ€ เช•เซเชฐเชฟเชฏเชพ เชธเชฟเชตเชพเชฏ เชฌเชงเซเช‚ เชœ เชคเซˆเชฏเชพเชฐ เช›เซ‡: เชชเชฐเซ€เช•เซเชทเชฃ เชเชจเซเชœเชฟเชจ เชชเซ‹เชคเซ‡ เชœ เชฒเซ‹เช‚เชš เช•เชฐเชตเซเช‚, เชœเซ‡เชฅเซ€ เชคเซ‡ เช•เชตเชฐเซ‡เชœ เชตเชฟเชถเซ‡ เชฎเชพเชนเชฟเชคเซ€ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ€ เชถเช•เซ‡, เชœเซ‡เชจเซ‹ เชธเซเช•เซ‡เชจเชฐ เชชเช›เซ€เชฅเซ€ เช‰เชชเชฏเซ‹เช— เช•เชฐเชถเซ‡.

เชชเชฐเช‚เชคเซ เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เช† เชฎเชพเชนเชฟเชคเซ€ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชชเชฐเซ€เช•เซเชทเชฃ เชเชจเซเชœเชฟเชจเชจเซ‡ เช—เซ‹เช เชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เช† เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚, เชŸเซ‡เชธเซเชŸ เชเชจเซเชœเชฟเชจ เช›เซ‡ เชคเซเชฏเชพเช‚ เช›เซ‡. เช…เชจเซ‡ เชคเซ‡เชจเซ€ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชซเชพเช‡เชฒเชจเชพ เช…เชจเซเชฐเซ‚เชช เชตเชฟเชญเชพเช—เชฎเชพเช‚ เช›เซ‡ เชชเซ‡เช•เซ‡เชœ.เชœเซ‡เชธเชจ.

เชšเชพเชฒเซ‹ เช† เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เช‰เชฎเซ‡เชฐเซ€เช:

"collectCoverage": true,
"collectCoverageFrom": [
      "src/**/*",
      "!src/main.ts",
      "!src/App.vue",
      "!src/**/*.d.*",
      "!src/**/*__tests__*"
],

เชเชŸเชฒเซ‡ เช•เซ‡, เช…เชฎเซ‡ เช•เชตเชฐเซ‡เชœ เช…เชจเซ‡ เชธเซเชคเซเชฐเซ‹เชค (เช…เชชเชตเชพเชฆเซ‹ เชธเชพเชฅเซ‡) เช•เซ‡ เชœเซ‡เชจเชพ เช†เชงเชพเชฐเซ‡ เชคเซ‡เชจเซ€ เชฐเชšเชจเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ เชคเซ‡เชจเซ€ เช—เชฃเชคเชฐเซ€ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชค เชฎเชพเชŸเซ‡ เชงเซเชตเชœ เชชเซ‹เชคเซ‡ เชœ เชธเซ‡เชŸ เช•เชฐเซเชฏเซ‹ เช›เซ‡.

เชนเชตเซ‡ เชšเชพเชฒเซ‹ เชŸเซ‡เชธเซเชŸ เชšเชฒเชพเชตเซ€เช:

yarn test

เช…เชฎเซ‡ เชจเซ€เชšเซ‡เชจเซ€ เชฌเชพเชฌเชคเซ‹ เชœเซ‹เชˆเชถเซเช‚:

VueJS+TS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ SonarQube เชธเชพเชฅเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซเช‚

เช•เชพเชฐเชฃ เช เช›เซ‡ เช•เซ‡ เช˜เชŸเช•เชฎเชพเช‚ เชœ เช•เซ‹เชˆ เช•เซ‹เชก เชจเชฅเซ€. เชšเชพเชฒเซ‹ เช†เชจเซ‡ เช เซ€เช• เช•เชฐเซ€เช.

HelloWorld.vue:

...
methods: {
    calc(n) {
      return n + 1;
    }
  },
mounted() {
  this.msg1 = this.msg + this.calc(1);
},
...

เช•เชตเชฐเซ‡เชœเชจเซ€ เช—เชฃเชคเชฐเซ€ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช† เชชเซ‚เชฐเชคเซเช‚ เชนเชถเซ‡.

เชชเชฐเซ€เช•เซเชทเชฃ เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซเชฏเชพ เชชเช›เซ€, เช…เชฎเซ‡ เช†เชจเซ€ เช–เชพเชคเชฐเซ€ เช•เชฐเซ€เชถเซเช‚:

VueJS+TS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ SonarQube เชธเชพเชฅเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซเช‚

เชธเซเช•เซเชฐเซ€เชจ เชชเชฐ เช†เชชเชฃเซ‡ เช•เชตเชฐเซ‡เชœ เชตเชฟเชถเซ‡เชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เชœเซ‹เชตเซ€ เชœเซ‹เชˆเช, เช…เชจเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชซเซ‹เชฒเซเชกเชฐเชฎเชพเช‚ เชเช• เชซเซ‹เชฒเซเชกเชฐ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ เช•เชตเชฐเซ‡เชœ เชธเชพเชฐเซเชตเชคเซเชฐเชฟเช• เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชตเชฐเซ‡เชœ เชฎเชพเชนเชฟเชคเซ€ เชธเชพเชฅเซ‡ LCOV (LTP GCOV เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจ).

Gcov เช•เซ‹เชก เช•เชตเชฐเซ‡เชœเชจเซ€ เชคเชชเชพเชธ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฎเซเช•เซเชคเชชเชฃเซ‡ เชตเชฟเชคเชฐเชฟเชค เช‰เชชเชฏเซ‹เช—เชฟเชคเชพ เช›เซ‡. Gcov เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฎเชพเช‚ เชฆเชฐเซ‡เช• เชธเซเชŸเซ‡เชŸเชฎเซ‡เชจเซเชŸ เชฎเชพเชŸเซ‡ เชเช•เซเชเซ‡เช•เซเชฏเซเชถเชจเชจเซ€ เชšเซ‹เช•เซเช•เชธ เชธเช‚เช–เซเชฏเชพ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเชฎเชจเซ‡ เชธเซ‹เชฐเซเชธ เช•เซ‹เชกเชฎเชพเช‚ เชŸเซ€เช•เชพ เช‰เชฎเซ‡เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. GCC เชชเซ‡เช•เซ‡เชœเชจเชพ เชญเชพเช— เชฐเซ‚เชชเซ‡ Gcov เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เช‰เชชเชฏเซ‹เช—เชฟเชคเชพ เชคเชฐเซ€เช•เซ‡ เช†เชตเซ‡ เช›เซ‡.
เชเชฒเช•เซ‹เชต - gcov เชฎเชพเชŸเซ‡ เช—เซเชฐเชพเชซเชฟเช•เชฒ เช‡เชจเซเชŸเชฐเชซเซ‡เชธ. เชคเซ‡ เชฌเชนเซเชตเชฟเชง เชธเซเชฐเซ‹เชค เชซเชพเช‡เชฒเซ‹ เชฎเชพเชŸเซ‡ gcov เชซเชพเช‡เชฒเซ‹เชจเซ‡ เชเชธเซ‡เชฎเซเชฌเชฒ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เช•เซ‹เชก เช…เชจเซ‡ เช•เชตเชฐเซ‡เชœ เชฎเชพเชนเชฟเชคเซ€ เชธเชพเชฅเซ‡ HTML เชชเซƒเชทเซเช เซ‹เชจเซ‹ เชธเชฎเซ‚เชน เชฌเชจเชพเชตเซ‡ เช›เซ‡. เชจเซ‡เชตเชฟเช—เซ‡เชถเชจเชจเซ‡ เชธเชฐเชณ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชชเซƒเชทเซเช เซ‹ เชชเชฃ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. Lcov เชถเชฌเซเชฆเชฎเชพเชณเชพเช“, เช•เชพเชฐเซเชฏเซ‹ เช…เชจเซ‡ เชถเชพเช–เชพเช“เชจเชพ เช•เชตเชฐเซ‡เชœเชจเซ‡ เชธเชชเซ‹เชฐเซเชŸ เช•เชฐเซ‡ เช›เซ‡.

เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชชเซ‚เชฐเซเชฃ เชฅเชฏเชพ เชชเช›เซ€, เช•เชตเชฐเซ‡เชœ เชฎเชพเชนเชฟเชคเซ€ เชธเซเชฅเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ coverage/lcov.info.
เช†เชชเชฃเซ‡ เช•เชนเซ‡เชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชธเซ‹เชจเชพเชฐ'เชนเซเช‚ เช•เซเชฏเชพเช‚เชฅเซ€ เชฎเซ‡เชณเชตเซ€ เชถเช•เซเช‚? เชคเซ‡เชฅเซ€, เชšเชพเชฒเซ‹ เชคเซ‡เชจเซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเชˆเชฒเชฎเชพเช‚ เชจเซ€เชšเซ‡เชจเซ€ เชฒเซ€เชŸเซ€เช“ เช‰เชฎเซ‡เชฐเซ€เช. เชชเชฐเช‚เชคเซ เชคเซเชฏเชพเช‚ เชเช• เชฎเซเชฆเซเชฆเซ‹ เช›เซ‡: เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฌเชนเซเชญเชพเชทเซ€ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡, เชเชŸเชฒเซ‡ เช•เซ‡, เชซเซ‹เชฒเซเชกเชฐเชฎเชพเช‚ เชธเซเชฐเซ‹เชค เช˜เชฃเซ€ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช— เชญเชพเชทเชพเช“ เช…เชจเซ‡ เชเช• เช…เชฅเชตเชพ เชฌเซ€เชœเซ€ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฃ เชฎเชพเชŸเซ‡ เชธเซเชฐเซ‹เชค เช•เซ‹เชกเซเชธ เช›เซ‡, เช…เชจเซ‡ เชฌเชฆเชฒเชพเชฎเชพเช‚, เชเช• เช…เชฅเชตเชพ เชฌเซ€เชœเชพ เชชเซเชฒเช—เช‡เชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชคเซ‡เชจเชพ เชตเชฟเชธเซเชคเชฐเชฃ เชฆเซเชตเชพเชฐเชพ เชจเช•เซเช•เซ€ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เช…เชจเซ‡ เช•เชตเชฐเซ‡เชœ เชฎเชพเชนเชฟเชคเซ€ เชตเชฟเชตเชฟเชง เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช— เชญเชพเชทเชพเช“ เชฎเชพเชŸเซ‡ เชตเชฟเชตเชฟเชง เชธเซเชฅเชณเซ‹เช เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡, เชคเซ‡เชฅเซ€ เชฆเชฐเซ‡เช• เชญเชพเชทเชพเชจเซ‡ เช† เชธเซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเซ‡เชจเซ‹ เชชเซ‹เชคเชพเชจเซ‹ เชตเชฟเชญเชพเช— เช›เซ‡. เช…เชฎเชพเชฐเซ‹ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ เชŸเชพเช‡เชชเชธเซเช•เซเชฐเชฟเชชเซเชŸ, เชคเซ‡เชฅเซ€ เช…เชฎเชจเซ‡ เชซเช•เซเชค เชคเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชตเชฟเชญเชพเช—เชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡:

sonar-project.properties:

sonar.typescript.coveragePlugin=lcov
sonar.typescript.lcov.reportPaths=coverage/lcov.info

เชธเซเช•เซ‡เชจเชฐเชจเชพ เชชเซเชฐเชฅเชฎ เชฒเซ‹เชจเซเชš เชฎเชพเชŸเซ‡ เชฌเชงเซเช‚ เชคเซˆเชฏเชพเชฐ เช›เซ‡. เชนเซเช‚ เช เชจเซ‹เช‚เชงเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚ เช•เซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช›เซ‡ เชธเซ‹เชจเชพเชฐเชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เช†เชชเซ‡เชฒ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เชชเซเชฐเชฅเชฎ เชตเช–เชค เชธเซเช•เซ‡เชจเชฐ เชšเชฒเชพเชตเซ‹ เช›เซ‹ เชคเซเชฏเชพเชฐเซ‡ 'e เช†เชชเซ‹เช†เชช เชฌเชจเซ‡ เช›เซ‡. เช…เชจเซเช—เชพเชฎเซ€ เชธเชฎเชฏเชฎเชพเช‚, เชธเชฎเชฏเชพเช‚เชคเชฐเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชชเชฐเชฟเชฎเชพเชฃเซ‹เชฎเชพเช‚ เชซเซ‡เชฐเชซเชพเชฐเชจเซ€ เช—เชคเชฟเชถเซ€เชฒเชคเชพ เชœเซ‹เชตเชพ เชฎเชพเชŸเซ‡ เชฎเชพเชนเชฟเชคเซ€ เชเช•เช เซ€ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

เชคเซ‹, เชšเชพเชฒเซ‹ เชชเชนเซ‡เชฒเชพ เชฌเชจเชพเชตเซ‡เชฒ เช†เชฆเซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เชชเซ‡เช•เซ‡เชœ.เชœเซ‡เชธเชจ:

yarn run sonar 

เช‰เชฆเชพเชนเชฐเชฃ: เชคเชฎเซ‡ เชชเชฐเชฟเชฎเชพเชฃเชจเซ‹ เชชเชฃ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ -X เชตเชงเซ เชตเชฟเช—เชคเชตเชพเชฐ เชฒเซ‹เช—เซ€เช‚เช— เชฎเชพเชŸเซ‡.

เชœเซ‹ เชธเซเช•เซ‡เชจเชฐ เชชเซเชฐเชฅเชฎ เชตเช–เชค เชฒเซ‹เช‚เชš เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเซ‹เชฏ, เชคเซ‹ เชธเซเช•เซ‡เชจเชฐเชจเซ€ เชฌเชพเชˆเชจเชฐเซ€ เชชเซ‹เชคเซ‡ เชœ เชชเชนเซ‡เชฒเชพ เชกเชพเช‰เชจเชฒเซ‹เชก เชฅเชถเซ‡. เชคเซ‡ เชชเช›เซ€ เชคเซ‡ เชถเชฐเซ‚ เชฅเชพเชฏ เช›เซ‡ เช…เชจเซ‡ เชธเชฐเซเชตเชฐเชจเซ‡ เชธเซเช•เซ‡เชจ เช•เชฐเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ‡ เช›เซ‡ เชธเซ‹เชจเชพเชฐเชธเซเชฅเชพเชชเชฟเชค เชชเซเชฒเช—เชˆเชจเซ‹ เชฎเชพเชŸเซ‡ a, เชคเซเชฏเชพเช‚ เช†เชงเชพเชฐเชญเซ‚เชค เชญเชพเชทเชพเชจเซ€ เช—เชฃเชคเชฐเซ€ เช•เชฐเซ‡ เช›เซ‡. เชคเซ‡เชจเซ€ เช•เชพเชฎเช—เซ€เชฐเซ€ เชฎเชพเชŸเซ‡เชจเชพ เช…เชจเซเชฏ เชตเชฟเชตเชฟเชง เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชชเชฃ เชฒเซ‹เชก เชฅเชฏเซ‡เชฒ เช›เซ‡: เช—เซเชฃเชตเชคเซเชคเชพ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเซเชธ, เชธเช•เซเชฐเชฟเชฏ เชจเชฟเชฏเชฎเซ‹, เชฎเซ‡เชŸเซเชฐเชฟเช•เซเชธ เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€, เชธเชฐเซเชตเชฐ เชจเชฟเชฏเชฎเซ‹.

VueJS+TS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ SonarQube เชธเชพเชฅเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซเช‚

VueJS+TS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ SonarQube เชธเชพเชฅเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซเช‚

เช‰เชฆเชพเชนเชฐเชฃ: เช…เชฎเซ‡ เช† เชฒเซ‡เช–เชจเชพ เชฎเชพเชณเช–เชพเชฎเชพเช‚ เชคเซ‡เชฎเชจเชพ เชชเชฐ เชตเชฟเช—เชคเชตเชพเชฐ เชงเซเชฏเชพเชจ เช†เชชเซ€เชถเซเช‚ เชจเชนเซ€เช‚, เชชเชฐเช‚เชคเซ เชคเชฎเซ‡ เชนเช‚เชฎเซ‡เชถเชพ เชธเชคเซเชคเชพเชตเชพเชฐ เชธเซเชคเซเชฐเซ‹เชคเซ‹เชจเซ‹ เชธเช‚เชชเชฐเซเช• เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹.

เช†เช—เชณ, เชซเซ‹เชฒเซเชกเชฐ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เชถเชฐเซ‚ เชฅเชพเชฏ เช›เซ‡ เชธเซเชฐเซ‹เชค เชคเซ‡เชฎเชจเชพ เช…เชจเซเช—เชพเชฎเซ€ เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพ เชธเชพเชฅเซ‡, เชฌเชงเชพ เชฎเชพเชŸเซ‡ เชธเซเชฐเซ‹เชค เชซเชพเช‡เชฒเซ‹เชจเซ€ เช‰เชชเชฒเชฌเซเชงเชคเชพ เชฎเชพเชŸเซ‡ (เชœเซ‹ เช•เซ‹เชˆ เชšเซ‹เช•เซเช•เชธ เชธเซเชชเชทเซเชŸเชชเชฃเซ‡ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เชจ เชนเซ‹เชฏ เชคเซ‹) เชธเชฎเชฐเซเชฅเชฟเชค เชญเชพเชทเชพ.

VueJS+TS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ SonarQube เชธเชพเชฅเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซเช‚

เช†เช—เชณ เชตเชฟเชตเชฟเชง เช…เชจเซเชฏ เชตเชฟเชถเซเชฒเซ‡เชทเชฃเซ‹ เช†เชตเซ‡ เช›เซ‡, เชœเซ‡เชจเชพ เชชเชฐ เช…เชฎเซ‡ เช† เชฒเซ‡เช–เชฎเชพเช‚ เชงเซเชฏเชพเชจ เช•เซ‡เชจเซเชฆเซเชฐเชฟเชค เช•เชฐเชคเชพ เชจเชฅเซ€ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชฒเชฟเช‚เชŸเชฟเช‚เช—, เช•เซ‹เชก เชกเซเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ€ เชถเซ‹เชง, เชตเช—เซ‡เชฐเซ‡).

เชธเซเช•เซ‡เชจเชฐเชจเชพ เช•เชพเชฎเชจเชพ เช–เซ‚เชฌ เชœ เช…เช‚เชคเซ‡, เชฌเชงเซ€ เชเช•เชคเซเชฐเชฟเชค เชฎเชพเชนเชฟเชคเซ€ เชเช•เชคเซเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เช†เชฐเซเช•เชพเช‡เชต เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชธเชฐเซเชตเชฐเชจเซ‡ เชฎเซ‹เช•เชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เช† เชชเช›เซ€, เชตเซ‡เชฌ เชˆเชจเซเชŸเชฐเชซเซ‡เชธเชฎเชพเช‚ เชถเซเช‚ เชฅเชฏเซเช‚ เชคเซ‡ เช†เชชเชฃเซ‡ เชœเซ‹เชˆ เชถเช•เซ€เช เช›เซ€เช:

VueJS+TS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ SonarQube เชธเชพเชฅเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซเช‚

เชœเซ‡เชฎ เช†เชชเชฃเซ‡ เชœเซ‹เชˆ เชถเช•เซ€เช เช›เซ€เช, เช•เช‚เชˆเช• เช•เชพเชฎ เช•เชฐเซเชฏเซเช‚ เช›เซ‡, เช…เชจเซ‡ เช…เชฎเซเช• เชชเซเชฐเช•เชพเชฐเชจเซเช‚ เช•เชตเชฐเซ‡เชœ เชชเชฃ เชฌเชคเชพเชตเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเซ‡ เช†เชชเชฃเชพ เชธเชพเชฅเซ‡ เชฎเซ‡เชณ เช–เชพเชคเซเช‚ เชจเชฅเซ€ เชคเซเชฏเชพเช‚ เช›เซ‡- เช…เชนเซ‡เชตเชพเชฒ.

เชšเชพเชฒเซ‹ เชคเซ‡เชจเซ‡ เช†เช•เซƒเชคเชฟ เช•เชฐเซ€เช. เชšเชพเชฒเซ‹ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ เชตเชงเซ เชตเชฟเช—เชคเชฎเชพเช‚ เชœเซ‹เชˆเช, เช•เชตเชฐเซ‡เชœ เชฎเซ‚เชฒเซเชฏ เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซ‹ เช…เชจเซ‡ เชตเชฟเช—เชคเชตเชพเชฐ เชซเชพเช‡เชฒ เชฐเชฟเชชเซ‹เชฐเซเชŸเชฎเชพเช‚ "เชชเชกเชตเซเช‚":

VueJS+TS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ SonarQube เชธเชพเชฅเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซเช‚

เช…เชนเซ€เช‚ เช†เชชเชฃเซ‡ เชฎเซเช–เซเชฏ เช‰เชชเชฐเชพเช‚เชค, เชคเชชเชพเชธเซ‡เชฒ เชซเชพเชˆเชฒ เชœเซ‹เชˆเช เช›เซ€เช HelloWorld.vue, เชเช• เชซเชพเช‡เชฒ เชชเชฃ เช›เซ‡ เชฎเซเช–เซเชฏ เชŸเซ€.เชเชธ, เชœเซ‡ เช•เชตเชฐเซ‡เชœเชจเชพ เชธเชฎเช—เซเชฐ เชšเชฟเชคเซเชฐเชจเซ‡ เชฌเช—เชพเชกเซ‡ เช›เซ‡. เชชเชฐเช‚เชคเซ เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เช•เชตเชฐเซ‡เชœเชจเซ€ เช—เชฃเชคเชฐเซ€เชฎเชพเช‚เชฅเซ€ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฌเชพเช•เชพเชค เชฐเชพเช–เซเชฏเซเช‚. เชนเชพ, เชฌเชงเซเช‚ เชธเชพเชšเซเช‚ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเซ‡ เชธเซเชคเชฐ เชชเชฐ เชนเชคเซเช‚ เชคเซเชฏเชพเช‚ เช›เซ‡, เชชเชฐเช‚เชคเซ เชธเซเช•เซ‡เชจเชฐ เชคเซ‡เชจเซ‡ เช…เชจเซเช•เซเชฐเชฎเชฟเชค เช•เชฐเซ‡ เช›เซ‡, เชคเซ‡เชฅเซ€ เชคเซ‡ เชคเซ‡เชจเซ€ เช—เชฃเชคเชฐเซ€เชฎเชพเช‚ เชธเชฎเชพเชชเซเชค เชฅเชพเชฏ เช›เซ‡.

เชšเชพเชฒเซ‹ เช†เชจเซ‡ เช เซ€เช• เช•เชฐเซ€เช:

sonar-project.properties:

...
sonar.exclusions=src/main.ts
...

เชนเซเช‚ เชธเซเชชเชทเซเชŸเชคเชพ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚: เช† เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐเชฎเชพเช‚ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เชซเซ‹เชฒเซเชกเชฐเซเชธ เช‰เชชเชฐเชพเช‚เชค, เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐเชฎเชพเช‚ เชธเซ‚เชšเชฟเชฌเชฆเซเชง เชฌเชงเชพ เชซเซ‹เชฒเซเชกเชฐเซเชธ เชชเชฃ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เช›เซ‡. เชธเซ‹เชจเชพเชฐ.เชŸเซ‡เชธเซเชŸ.เชธเชฎเชพเชตเซ‡เชถ.

เชธเซเช•เซ‡เชจเชฐ เชฒเซ‹เช‚เชš เช•เชฐเซเชฏเชพ เชชเช›เซ€, เช…เชฎเชจเซ‡ เชธเชพเชšเซ€ เชฎเชพเชนเชฟเชคเซ€ เชฆเซ‡เช–เชพเชฏ เช›เซ‡:

VueJS+TS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ SonarQube เชธเชพเชฅเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซเช‚

VueJS+TS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ SonarQube เชธเชพเชฅเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซเช‚

เชšเชพเชฒเซ‹ เช†เช—เชณเชจเซ‹ เชฎเซเชฆเซเชฆเซ‹ เชœเซ‹เชˆเช - เช—เซเชฃเชตเชคเซเชคเชพ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเซเชธ. เชฎเซ‡เช‚ เช‰เชชเชฐ เช†เชงเชพเชฐ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€ เชธเซ‹เชจเชพเชฐ'เช“เชฎ เชเช• เชœ เชธเชฎเชฏเซ‡ เช˜เชฃเซ€ เชญเชพเชทเชพเช“. เช† เชฌเชฐเชพเชฌเชฐ เช›เซ‡ เชœเซ‡ เช†เชชเชฃเซ‡ เชœเซ‹เชˆ เชฐเชนเซเชฏเชพ เช›เซ€เช. เชชเชฐเช‚เชคเซ เช…เชฎเซ‡ เชœเชพเชฃเซ€เช เช›เซ€เช เช•เซ‡ เช…เชฎเชพเชฐเซ‹ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฒเช–เชพเชฏเซ‡เชฒ เช›เซ‡ TS, เชคเซ‹ เชถเชพ เชฎเชพเชŸเซ‡ เชธเซเช•เซ‡เชจเชฐเชจเซ‡ เชฌเชฟเชจเชœเชฐเซ‚เชฐเซ€ เชฎเซ‡เชจเซ€เชชเซเชฏเซเชฒเซ‡เชถเชจเซเชธ เช…เชจเซ‡ เชคเชชเชพเชธ เชธเชพเชฅเซ‡ เชคเชพเชฃเชตเซเช‚. เช…เชฎเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒเชฎเชพเช‚ เชตเชงเซ เชเช• เชชเชฐเชฟเชฎเชพเชฃ เช‰เชฎเซ‡เชฐเซ€เชจเซ‡ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เชฎเชพเชŸเซ‡ เชญเชพเชทเชพ เชธเซ‡เชŸ เช•เชฐเซ€เชถเซเช‚ เชธเซ‹เชจเชพเชฐ'เช:

sonar-project.properties:

...
sonar.language=ts
...

เชšเชพเชฒเซ‹ เชซเชฐเซ€เชฅเซ€ เชธเซเช•เซ‡เชจเชฐ เชšเชฒเชพเชตเซ€เช เช…เชจเซ‡ เชชเชฐเชฟเชฃเชพเชฎ เชœเซ‹เชˆเช:

VueJS+TS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ SonarQube เชธเชพเชฅเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซเช‚

เช•เชตเชฐเซ‡เชœ เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เช…เชฆเซƒเชถเซเชฏ เชฅเชˆ เช—เชฏเซเช‚ เชนเชคเซเช‚.

เชœเซ‹ เช†เชชเชฃเซ‡ เชธเซเช•เซ‡เชจเชฐ เชฒเซ‹เช— เชœเซ‹เชˆเช, เชคเซ‹ เช†เชชเชฃเซ‡ เชจเซ€เชšเซ‡เชจเซ€ เชฒเซ€เชŸเซ€ เชœเซ‹เชˆ เชถเช•เซ€เช เช›เซ€เช:

VueJS+TS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ SonarQube เชธเชพเชฅเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซเช‚

เชเชŸเชฒเซ‡ เช•เซ‡, เช…เชฎเชพเชฐเซ€ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชซเชพเช‡เชฒเซ‹ เชซเช•เซเชค เช…เชจเซเช•เซเชฐเชฎเชฟเชค เชจ เชนเชคเซ€.

เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟ เชจเซ€เชšเซ‡ เชฎเซเชœเชฌ เช›เซ‡: เชธเชคเซเชคเชพเชตเชพเชฐ เชฐเซ€เชคเซ‡ เชธเชชเซ‹เชฐเซเชŸเซ‡เชก VueJs เชชเซเชฒเช—เช‡เชจเชฎเชพเช‚ เช›เซ‡ เชธเซ‹เชจเชพเชฐเชœเซ‡เชเชธเช•เซ‹เชฃ เชœเชตเชพเชฌเชฆเชพเชฐ เช›เซ‡ เชœเชพเชตเชพเชธเซเช•เซเชฐเชฟเชชเซเชŸ.

VueJS+TS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ SonarQube เชธเชพเชฅเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซเช‚

เชชเชฐเช‚เชคเซ เช† เชธเชชเซ‹เชฐเซเชŸ เชชเซเชฒเช—เช‡เชจเชฎเชพเช‚ เชจเชฅเซ€ SonarTS เชฎเชพเชŸเซ‡ TS, เชœเซ‡เชจเชพ เชตเชฟเชถเซ‡ เชฌเช— เชŸเซเชฐเซ‡เช•เชฐเชฎเชพเช‚ เชธเชคเซเชคเชพเชตเชพเชฐ เชŸเชฟเช•เชฟเชŸ เช–เซ‹เชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€ เชธเซ‹เชจเชพเชฐ'เช:

  1. https://jira.sonarsource.com/browse/MMF-1441
  2. https://github.com/SonarSource/SonarJS/issues/1281

เชธเซ‹เชจเชพเชฐเช•เซเชฏเซเชฌ เชกเซ‡เชตเชฒเชชเชฐเซเชธเชจเชพ เชชเซเชฐเชคเชฟเชจเชฟเชงเชฟเช“เชฎเชพเช‚เชฅเซ€ เชเช•เชจเชพ เช•เซ‡เชŸเชฒเชพเช• เชœเชตเชพเชฌเซ‹ เช† เชนเช•เซ€เช•เชคเชจเซ€ เชชเซเชทเซเชŸเชฟ เช•เชฐเซ‡ เช›เซ‡.

VueJS+TS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ SonarQube เชธเชพเชฅเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซเช‚

VueJS+TS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ SonarQube เชธเชพเชฅเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซเช‚

เชชเชฐเช‚เชคเซ เชฌเชงเซเช‚ เช…เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เช•เชพเชฎ เช•เชฐเชคเซเช‚ เชนเชคเซเช‚, เชคเชฎเซ‡ เชตเชพเช‚เชงเซ‹ เช‰เช เชพเชตเซ‹ เช›เซ‹. เชนเชพ เชคเซ‡ เช›เซ‡, เชšเชพเชฒเซ‹ เชคเซ‡เชจเซ‡ เชฅเซ‹เชกเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เช "เชนเซ‡เช•".
เช†เชงเชพเชฐ เชนเซ‹เชฏ เชคเซ‹ .vue-เชซเชพเชˆเชฒเซ‹ เชธเซ‹เชจเชพเชฐ'เช“เชน, เชคเซ‹ เชšเชพเชฒเซ‹ เชคเซ‡เชจเซ‡ เช•เชนเซ‡เชตเชพเชจเซ‹ เชชเซเชฐเชฏเชคเซเชจ เช•เชฐเซ€เช เช•เซ‡ เชคเซ‡เช“ เชคเซ‡เชฎเชจเซ‡ เชฎเชพเชจเซ‡ เชŸเชพเช‡เชชเชธเซเช•เซเชฐเชฟเชชเซเชŸ.

เชšเชพเชฒเซ‹ เชเช• เชชเชฐเชฟเชฎเชพเชฃ เช‰เชฎเซ‡เชฐเซ€เช:

sonar-project.properties:

...
sonar.typescript.file.suffixes=.ts,.tsx,.vue
...

เชšเชพเชฒเซ‹ เชธเซเช•เซ‡เชจเชฐ เชฒเซ‹เช‚เชš เช•เชฐเซ€เช:

VueJS+TS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ SonarQube เชธเชพเชฅเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซเช‚

เช…เชจเซ‡, เชตเซ‹เช‡เชฒเชพ, เชฌเชงเซเช‚ เชธเชพเชฎเชพเชจเซเชฏ เชฅเชˆ เช—เชฏเซเช‚ เช›เซ‡, เช…เชจเซ‡ เชซเช•เซเชค เชเช• เชชเซเชฐเซ‹เชซเชพเช‡เชฒ เชธเชพเชฅเซ‡ เชŸเชพเช‡เชชเชธเซเช•เซเชฐเชฟเชชเซเชŸ. เชเชŸเชฒเซ‡ เช•เซ‡, เช…เชฎเซ‡ เชธเชฎเชฐเซเชฅเชจเชฎเชพเช‚ เชธเชฎเชธเซเชฏเชพ เชนเชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เชตเซเชฏเชตเชธเซเชฅเชพเชชเชฟเชค เช›เซ€เช VueJs+TS เชฎเชพเชŸเซ‡ เชธเซ‹เชจเชพเชฐเช•เซเชฏเซ‚เชฌ.

เชšเชพเชฒเซ‹ เช†เช—เชณ เชœเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เช เช…เชจเซ‡ เช•เชตเชฐเซ‡เชœเชจเซ€ เชฎเชพเชนเชฟเชคเซ€เชฎเชพเช‚ เชฅเซ‹เชกเซ‹ เชธเซเชงเชพเชฐเซ‹ เช•เชฐเซ€เช.

เช…เชฎเซ‡ เช…เชคเซเชฏเชพเชฐ เชธเซเชงเซ€ เชถเซเช‚ เช•เชฐเซเชฏเซเช‚ เช›เซ‡:

  • เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเซเชฏเซเช‚ เชธเซ‹เชจเชพเชฐ- เชธเซเช•เซ‡เชจเชฐ;
  • เชธเซเชฅเชพเชชเชจเชพ เชคเซเชฏเชพเช‚ เช›เซ‡ เช•เชตเชฐเซ‡เชœ เชฎเชพเชนเชฟเชคเซ€ เชชเซ‡เชฆเชพ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡;
  • เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค เชธเซ‹เชจเชพเชฐ- เชธเซเช•เซ‡เชจเชฐ;
  • เช†เชงเชพเชฐ เชธเชฎเชธเซเชฏเชพ เชนเชฒ เช•เชฐเซ€ .vue-เชซเชพเชˆเชฒเซ‹ + เชŸเชพเช‡เชชเชธเซเช•เซเชฐเชฟเชชเซเชŸ.

เชชเชฐเซ€เช•เซเชทเชฃ เช•เชตเชฐเซ‡เชœ เช‰เชชเชฐเชพเช‚เชค, เช•เซ‹เชก เช—เซเชฃเชตเชคเซเชคเชพ เชฎเชพเชŸเซ‡ เช…เชจเซเชฏ เชฐเชธเชชเซเชฐเชฆ เช‰เชชเชฏเซ‹เช—เซ€ เชฎเชพเชชเชฆเช‚เชกเซ‹ เช›เซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช•เซ‹เชก เชกเซเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช…เชจเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ€ เชฐเซ‡เช–เชพเช“เชจเซ€ เชธเช‚เช–เซเชฏเชพ (เช•เซ‹เชก เชœเชŸเชฟเชฒเชคเชพเชจเซ‡ เชธเช‚เชฌเช‚เชงเชฟเชค เช—เซเชฃเชพเช‚เช•เชจเซ€ เช—เชฃเชคเชฐเซ€เชฎเชพเช‚ เชธเชพเชฎเซ‡เชฒ).

เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชชเซเชฒเช—เช‡เชจเชจเชพ เชตเชฐเซเชคเชฎเชพเชจ เช…เชฎเชฒเซ€เช•เชฐเชฃเชฎเชพเช‚ TS (SonarTS) เช•เชพเชฎ เช•เชฐเชถเซ‡ เชจเชนเซ€เช‚ CPD (เช•เซ‹เชชเซ€ เชชเซ‡เชธเซเชŸ เชกเชฟเชŸเซ‡เช•เซเชŸเชฐ) เช…เชจเซ‡ เช•เซ‹เชกเชจเซ€ เชฒเชพเช‡เชจเซ‹เชจเซ€ เช—เชฃเชคเชฐเซ€ .vue-เชซเชพเชˆเชฒเซ‹.

เช•เซ‹เชก เชกเซเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ€ เชธเชฟเชจเซเชฅเซ‡เชŸเซ€เช• เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เช˜เชŸเช•เซ‹เชจเซ€ เชซเชพเช‡เชฒเชจเซ‡ เช…เชฒเช— เชจเชพเชฎ เชธเชพเชฅเซ‡ เชกเซเชชเซเชฒเชฟเช•เซ‡เชŸ เช•เชฐเซ‹ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช•เซ‹เชกเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเซ‹ เชฎเซเช–เซเชฏ เชŸเซ€.เชเชธ เชเช• เชกเชฎเซ€ เชซเช‚เช•เซเชถเชจ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช…เชฒเช— เชจเชพเชฎ เชธเชพเชฅเซ‡ เชกเซเชชเซเชฒเชฟเช•เซ‡เชŸ เช•เชฐเซ‹. เชฎเชพเช‚ เชคเชฐเซ€เช•เซ‡ เชกเซเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชคเชชเชพเชธเชตเชพ เชฎเชพเชŸเซ‡ .vue, เช…เชจเซ‡ เชฎเชพเช‚ .ts -เชซเชพเชˆเชฒเซ‹.

main.ts:

...
function name(params:string): void {
  console.log(params);
}
...

เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฒเชพเช‡เชจ เชชเชฐ เช…เชธเซเชฅเชพเชฏเซ€ เชฐเซ‚เชชเซ‡ เชŸเชฟเชชเซเชชเชฃเซ€ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡:

sonar-project.properties:

...
sonar.exclusions=src/main.ts
...

เชšเชพเชฒเซ‹ เชชเชฐเซ€เช•เซเชทเชฃ เชธเชพเชฅเซ‡ เชธเซเช•เซ‡เชจเชฐเชจเซ‡ เชซเชฐเซ€เชฅเซ€ เชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซ€เช:

yarn test && yarn run sonar

เช…เชฒเชฌเชคเซเชค, เช…เชฎเชพเชฐเซเช‚ เช•เชตเชฐเซ‡เชœ เช˜เชŸเชถเซ‡, เชชเชฐเช‚เชคเซ เชนเชตเซ‡ เช…เชฎเชจเซ‡ เชคเซ‡เชฎเชพเช‚ เชฐเชธ เชจเชฅเซ€.

เช•เซ‹เชกเชจเซ€ เชกเซเชชเซเชฒเชฟเช•เซ‡เชŸเชฟเช‚เช— เชฐเซ‡เช–เชพเช“เชจเชพ เชธเช‚เชฆเชฐเซเชญเชฎเชพเช‚, เช…เชฎเซ‡ เชœเซ‹เชถเซเช‚:

VueJS+TS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ SonarQube เชธเชพเชฅเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซเช‚

เชคเชชเชพเชธเชตเชพ เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚ เชธเซ€เชชเซ€เชกเซ€เช‰เชชเชฏเซ‹เช—เชฟเชคเชพ - jscpd:

npx jscpd src

VueJS+TS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ SonarQube เชธเชพเชฅเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซเช‚

เช•เซ‹เชกเชจเซ€ เชฐเซ‡เช–เชพเช“ เชฎเชพเชŸเซ‡:

VueJS+TS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ SonarQube เชธเชพเชฅเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซเช‚

เช•เชฆเชพเชš เช† เชญเชตเชฟเชทเซเชฏเชจเชพ เชชเซเชฒเช—เช‡เชจ เชธเช‚เชธเซเช•เชฐเชฃเซ‹เชฎเชพเช‚ เช‰เช•เซ‡เชฒเชพเชˆ เชœเชถเซ‡ SonarJS(TS). เชนเซเช‚ เช เชจเซ‹เช‚เชงเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚ เช•เซ‡ เชคเซ‡เช“ เชงเซ€เชฎเซ‡ เชงเซ€เชฎเซ‡ เช† เชฌเซ‡ เชชเซเชฒเช—เชฟเชจเซเชธเชจเซ‡ เชเช•เชฎเชพเช‚ เชฎเชฐเซเชœ เช•เชฐเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ‡ เชธเซ‹เชจเชพเชฐเชœเซ‡เชเชธ, เชœเซ‡ เชฎเชจเซ‡ เชฏเซ‹เช—เซเชฏ เชฒเชพเช—เซ‡ เช›เซ‡.

เชนเชตเซ‡ เชนเซเช‚ เช•เชตเชฐเซ‡เชœ เชฎเชพเชนเชฟเชคเซ€ เชธเซเชงเชพเชฐเชตเชพเชจเชพ เชตเชฟเช•เชฒเซเชช เชชเชฐ เชตเชฟเชšเชพเชฐ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เชคเซ‹ เชนเชคเซ‹.

เช…เชคเซเชฏเชพเชฐ เชธเซเชงเซ€ เช†เชชเชฃเซ‡ เชธเชฎเช—เซเชฐ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เช…เชจเซ‡ เช–เชพเชธ เช•เชฐเซ€เชจเซ‡ เชซเชพเช‡เชฒเซ‹ เชฎเชพเชŸเซ‡ เชŸเช•เชพเชตเชพเชฐเซ€เชจเซ€ เชฆเซเชฐเชทเซเชŸเชฟเช เชŸเซ‡เชธเซเชŸ เช•เชตเชฐเซ‡เชœ เชœเซ‹เชˆ เชถเช•เซ€เช เช›เซ€เช. เชชเชฐเช‚เชคเซ เชœเชฅเซเชฅเชพ เชตเชฟเชถเซ‡เชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เชธเชพเชฅเซ‡ เช† เชธเซ‚เชšเช•เชจเซ‡ เชตเชฟเชธเซเชคเซƒเชค เช•เชฐเชตเซเช‚ เชถเช•เซเชฏ เช›เซ‡ เชเช•เชฎ- เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เชชเชฐเซ€เช•เซเชทเชฃเซ‹, เชคเซ‡เชฎเชœ เชซเชพเช‡เชฒเซ‹เชจเชพ เชธเช‚เชฆเชฐเซเชญเชฎเชพเช‚.

เชคเซเชฏเชพเช‚ เชเช• เชชเซเชธเซเชคเช•เชพเชฒเชฏ เช›เซ‡ เชœเซ‡ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡ เชคเซเชฏเชพเช‚ เช›เซ‡- เชฐเชฟเชชเซ‹เชฐเซเชŸเชจเซ‡ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เช•เชจเซเชตเชฐเซเชŸ เช•เชฐเซ‹ เชธเซ‹เชจเชพเชฐ'เช:
เชธเชพเชฎเชพเชจเซเชฏ เชชเชฐเซ€เช•เซเชทเชฃ เชกเซ‡เชŸเชพ - https://docs.sonarqube.org/display/SONAR/Generic+Test+Data.

เชšเชพเชฒเซ‹ เช† เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เชจเซ‡ เช…เชฎเชพเชฐเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€เช:

yarn add jest-sonar-reporter

เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเซ‹ เชคเซเชฏเชพเช‚ เช›เซ‡:

package.json:

โ€ฆ
"testResultsProcessor": "jest-sonar-reporter"
โ€ฆ

เชนเชตเซ‡ เชšเชพเชฒเซ‹ เชŸเซ‡เชธเซเชŸ เชšเชฒเชพเชตเซ€เช:

yarn test

เชœเซ‡ เชชเช›เซ€ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเชพ เชฐเซ‚เชŸเชฎเชพเช‚ เชเช• เชซเชพเช‡เชฒ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ test-report.xml.

เชšเชพเชฒเซ‹ เชคเซ‡เชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชฎเชพเช‚ เชตเชพเชชเชฐเซ€เช เชธเซ‹เชจเชพเชฐ'เช:

sonar-project.properties:

โ€ฆ
sonar.testExecutionReportPaths=test-report.xml
โ€ฆ

เช…เชจเซ‡ เชธเซเช•เซ‡เชจเชฐ เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซ‹:

yarn run sonar

เชšเชพเชฒเซ‹ เชœเซ‹เชˆเช เช•เซ‡ เช‡เชจเซเชŸเชฐเชซเซ‡เชธเชฎเชพเช‚ เชถเซเช‚ เชฌเชฆเชฒเชพเชฏเซเช‚ เช›เซ‡ เชธเซ‹เชจเชพเชฐ'เช:

VueJS+TS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ SonarQube เชธเชพเชฅเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซเช‚

เช…เชจเซ‡ เช•เช‚เชˆ เชฌเชฆเชฒเชพเชฏเซเช‚ เชจเชฅเซ€. เชนเช•เซ€เช•เชค เช เช›เซ‡ เช•เซ‡ เชธเซ‹เชจเชพเชฐ เชœเซ‡เชธเซเชŸ เชฐเชฟเชชเซ‹เชฐเซเชŸเชฎเชพเช‚ เชตเชฐเซเชฃเชตเซ‡เชฒ เชซเชพเชˆเชฒเซ‹เชจเซ‡ เชซเชพเชˆเชฒเซ‹ เชฎเชพเชจเชคเชพ เชจเชฅเซ€ เชเช•เชฎ-เชชเชฐเซ€เช•เซเชทเชฃเซ‹. เช† เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเชจเซ‡ เชธเซเชงเชพเชฐเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชชเชฐเชฟเชฎเชพเชฃเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช เชธเซ‹เชจเชพเชฐ เชธเซ‹เชจเชพเชฐ.เชชเชฐเซ€เช•เซเชทเชฃเซ‹, เชœเซ‡เชฎเชพเช‚ เช…เชฎเซ‡ เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชธเชพเชฅเซ‡ เชซเซ‹เชฒเซเชกเชฐเซเชธเชจเซ‡ เชธเซเชชเชทเซเชŸเชชเชฃเซ‡ เชธเซ‚เชšเชตเซ€เชถเซเช‚ (เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชนเชฎเชฃเชพเช‚ เชฎเชพเชŸเซ‡ เชฎเชพเชคเซเชฐ เชเช• เช›เซ‡):

sonar-project.properties:

โ€ฆ
sonar.tests=src/components/__tests__
โ€ฆ

เชšเชพเชฒเซ‹ เชธเซเช•เซ‡เชจเชฐ เชซเชฐเซ€ เชถเชฐเซ‚ เช•เชฐเซ€เช:

yarn run sonar

เชšเชพเชฒเซ‹ เชœเซ‹เชˆเช เช•เซ‡ เชˆเชจเซเชŸเชฐเชซเซ‡เชธเชฎเชพเช‚ เชถเซเช‚ เชฌเชฆเชฒเชพเชฏเซเช‚ เช›เซ‡:

VueJS+TS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ SonarQube เชธเชพเชฅเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซเช‚

เชนเชตเซ‡ เช…เชฎเซ‡ เช…เชฎเชพเชฐเซ€ เชธเช‚เช–เซเชฏเชพ เชœเซ‹เชˆ เช›เซ‡ เชเช•เชฎ-เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เช…เชจเซ‡, เช…เช‚เชฆเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซ€เชจเซ‡ เชจเชฟเชทเซเชซเชณ เชฅเชฏเชพ เชชเช›เซ€, เช…เชฎเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชซเชพเช‡เชฒเซ‹ เชตเชšเซเชšเซ‡ เช† เชจเช‚เชฌเชฐเชจเซเช‚ เชตเชฟเชคเชฐเชฃ เชœเซ‹เชˆ เชถเช•เซ€เช เช›เซ€เช:

VueJS+TS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ SonarQube เชธเชพเชฅเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซเช‚

เชจเชฟเชทเซเช•เชฐเซเชท

เชคเซ‡เชฅเซ€, เช…เชฎเซ‡ เชธเชคเชค เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เชฎเชพเชŸเซ‡ เชเช• เชธเชพเชงเชจ เชคเชฐเชซ เชœเซ‹เชฏเซเช‚ เชธเซ‹เชจเชพเชฐเช•เซเชฏเซ‚เชฌ. เช…เชฎเซ‡ เชคเซ‡เชฎเชพเช‚ เชฒเช–เซ‡เชฒเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ เชธเชซเชณเชคเชพเชชเซ‚เชฐเซเชตเช• เชธเช‚เช•เชฒเชฟเชค เช•เชฐเซเชฏเชพ VueJs+TS. เช•เซ‡เชŸเชฒเชพเช• เชธเซเชธเช‚เช—เชคเชคเชพ เชฎเซเชฆเซเชฆเชพเช“ เชธเซเชงเชพเชฐเซ‡เชฒ. เช…เชฎเซ‡ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชตเชฐเซ‡เชœ เชธเซ‚เชšเช•เชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เชธเชพเชฎเช—เซเชฐเซ€เชฎเชพเช‚ เชตเชงเชพเชฐเซ‹ เช•เชฐเซเชฏเซ‹ เช›เซ‡. เช† เชฒเซ‡เช–เชฎเชพเช‚, เช…เชฎเซ‡ เช•เซ‹เชก เช—เซเชฃเชตเชคเซเชคเชพ เชฎเชพเชŸเซ‡เชจเชพ เชฎเชพเชชเชฆเช‚เชกเซ‹เชฎเชพเช‚เชฅเซ€ เชฎเชพเชคเซเชฐ เชเช• เชฎเชพเชชเชฆเช‚เชกเชจเซ€ เชคเชชเชพเชธ เช•เชฐเซ€ เช›เซ‡ (เช•เชฆเชพเชš เชฎเซเช–เซเชฏ เชชเซˆเช•เซ€ เชเช•), เชชเชฐเช‚เชคเซ เชธเซ‹เชจเชพเชฐเช•เซเชฏเซ‚เชฌ เชธเชฒเชพเชฎเชคเซ€ เชชเชฐเซ€เช•เซเชทเชฃ เชธเชนเชฟเชค เช…เชจเซเชฏ เช—เซเชฃเชตเชคเซเชคเชพ เชฎเชพเชชเชฆเช‚เชกเซ‹เชจเซ‡ เชธเชฎเชฐเซเชฅเชจ เช†เชชเซ‡ เช›เซ‡. เชชเชฐเช‚เชคเซ เช† เชคเชฎเชพเชฎ เชธเซเชตเชฟเชงเชพเช“ เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เช‰เชชเชฒเชฌเซเชง เชจเชฅเซ€ เชธเชฎเซเชฆเชพเชฏ- เช†เชตเซƒเชคเซเชคเชฟเช“. เชเช• เชฐเชธเชชเซเชฐเชฆ เช…เชจเซ‡ เช‰เชชเชฏเซ‹เช—เซ€ เชฒเช•เซเชทเชฃเซ‹ เชเช•เซ€เช•เชฐเชฃ เช›เซ‡ เชธเซ‹เชจเชพเชฐเช•เซเชฏเซ‚เชฌ เชตเชฟเชตเชฟเชง เช•เซ‹เชก เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€ เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ เชธเชฟเชธเซเชŸเชฎเซเชธ เชธเชพเชฅเซ‡, เชœเซ‡เชฎ เช•เซ‡ GitLab เช…เชจเซ‡ BitBucket. เช…เชŸเช•เชพเชตเชตเชพ เชฎเชฐเซเชœ เชชเซเชฒ(เชฎเชฐเซเชœ) เชตเชฟเชจเช‚เชคเซ€เชœเซเชฏเชพเชฐเซ‡ เช•เชตเชฐเซ‡เชœ เชกเชฟเช—เซเชฐเซ‡เชœ เชฅเชพเชฏ เช›เซ‡ เชคเซเชฏเชพเชฐเซ‡ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชจเซ€ เชฎเซเช–เซเชฏ เชถเชพเช–เชพ เชธเซเชงเซ€. เชชเชฐเช‚เชคเซ เช† เชเช• เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เช…เชฒเช— เชฒเซ‡เช– เชฎเชพเชŸเซ‡เชจเซ€ เชตเชพเชฐเซเชคเชพ เช›เซ‡.

PS: เช•เซ‹เชกเชจเชพ เชธเซเชตเชฐเซ‚เชชเชฎเชพเช‚ เชฒเซ‡เช–เชฎเชพเช‚ เชตเชฐเซเชฃเชตเซ‡เชฒ เชฆเชฐเซ‡เช• เชตเชธเซเชคเซ เช‰เชชเชฒเชฌเซเชง เช›เซ‡ เชฎเชพเชฐเซ‹ เช•เชพเช‚เชŸเซ‹.

เชซเช•เซเชค เชจเซ‹เช‚เชงเชพเชฏเซ‡เชฒเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชœ เชธเชฐเซเชตเซ‡เชฎเชพเช‚ เชญเชพเช— เชฒเชˆ เชถเช•เซ‡ เช›เซ‡. เชธเชพเช‡เชจ เช‡เชจ เช•เชฐเซ‹, เชฎเชนเซ‡เชฐเชฌเชพเชจเซ€ เช•เชฐเซ€เชจเซ‡.

เชถเซเช‚ เชคเชฎเซ‡ SonarQube เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹ เช›เซ‹:

  • 26,3%เชนเชพ 5

  • 15,8%เชจเช‚เชฌเชฐ 3

  • 15,8%เชฎเซ‡เช‚ เช† เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชตเชฟเชถเซ‡ เชธเชพเช‚เชญเชณเซเชฏเซเช‚ เช›เซ‡ เช…เชจเซ‡ 3 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚

  • 10,5%เชฎเซ‡เช‚ เช† เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชตเชฟเชถเซ‡ เชธเชพเช‚เชญเชณเซเชฏเซเช‚ เช›เซ‡ เช…เชจเซ‡ เชนเซเช‚ 2 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเช‚เช—เชคเซ‹ เชจเชฅเซ€

  • 0,0%เชนเซเช‚ เชเช• เช…เชฒเช— เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ0 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเช‚ เช›เซเช‚

  • 31,6%เชชเซเชฐเชฅเชฎ เชตเช–เชค เชฎเซ‡เช‚ เชคเซ‡เชฃเซ€เชจเชพ 6 เชตเชฟเชถเซ‡ เชธเชพเช‚เชญเชณเซเชฏเซเช‚ เช›เซ‡

19 เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“เช เชฎเชค โ€‹โ€‹เช†เชชเซเชฏเซ‹. 3 เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชฆเซ‚เชฐ เชฐเชนเซเชฏเชพ.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹