เบเบงเบเปเบฎเบปเบฒเปเบเปเปเบงเบเบตเปเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเบขเปเบฒเบเบเบดเบเบเบฑเบ soundQube เปเบเบทเปเบญเบฎเบฑเบเบชเบฒเบเบธเบเบเบฐเบเบฒเบเบฅเบฐเบซเบฑเบเบขเบนเปเปเบเบฅเบฐเบเบฑเบเบชเบนเบ. เปเบกเบทเปเบญเบฅเบงเบกเปเบญเบปเบฒเปเบเบเบเบฒเบเบซเบเบถเปเบเบเบตเปเบเบฝเบเปเบงเปเปเบ VueJs+เบเบปเบงเบเบดเบก, เบเบฑเบเบซเบฒเปเบเบตเบเบเบถเปเบ. เบเบฑเปเบเบเบฑเปเบ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเบขเบฒเบเบเบญเบเบเปเบฒเบเปเบเบฅเบฒเบเบฅเบฐเบญเบฝเบเปเบเบตเปเบกเปเบเบตเบกเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบเบฑเบเบเบฒเบเปเบเบงเปเบเปเบเบทเปเบญเปเบเปเปเบเบเบงเบเบกเบฑเบ.
เปเบเบเบปเบเบเบงเบฒเบกเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเบชเบปเบเบเบฐเบเบฒ, เบเบฑเปเบเบเบตเปเบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฝเบเบเปเบฒเบเปเบเบดเบ, เบเปเบฝเบงเบเบฑเบเปเบงเบเบต SonarQube. เบเบดเบเบชเบฐเบเบตเปเบฅเบฑเบเบเปเบญเบ - เบกเบฑเบเปเบกเปเบเบซเบเบฑเบเปเบเบเบเบปเปเบงเปเบ, เบชเปเบฒเบฅเบฑเบเบเบนเปเบเบตเปเปเบเปเบเบดเบเบเปเบฝเบงเบเบฑเบเบกเบฑเบเบเบฑเปเบเบเปเบฒเบญเบดเบ:
soundQube (เบญเบฐเบเบตเบ sonar) เปเบเบฑเบเปเบงเบเบตเปเบซเบผเปเบเปเบเบตเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบงเบเบเบฒเบขเปเบฒเบเบเปเปเปเบเบทเปเบญเบเปเบฅเบฐเบเบฒเบเบงเบฑเบเปเบเบเบเบธเบเบเบฐเบเบฒเบเบฅเบฐเบซเบฑเบ.
เบฎเบญเบเบฎเบฑเบเบเบฒเบเบงเบดเปเบเบฒเบฐเบฅเบฐเบซเบฑเบ เปเบฅเบฐเบเบฒเบเบเบงเบเบซเบฒเบเปเปเบเบดเบเบเบฒเบเบเบฒเบกเบเบปเบเบฅเบฐเบเบฝเบเบเบญเบ MISRA C, MISRA C++, MITER/CWE เปเบฅเบฐ CERT Secure Coding Standards programming Standards. เบกเบฑเบเบเบฑเบเบชเบฒเบกเบฒเบเบฎเบฑเบเบฎเบนเปเบเบงเบฒเบกเบเบดเบเบเบฒเบเบเบฒเบ OWASP Top 10 เปเบฅเบฐ CWE/SANS Top 25 เบฅเบฒเบเบเบทเปเบเบงเบฒเบกเบเบดเบเบเบฒเบเบเบฒเบเบเบฝเบเปเบเบผเปเบเบผเบก.
เปเบเบดเบเบงเปเบฒเบเบฐเบกเบตเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเปเบเบฅเบฐเบเบฐเบเบญเบกเปเบเปเปเบเบทเปเบญเบเบกเบทเบเบตเปเบเบฝเบกเบเปเบญเบกเบเปเบฒเบเป, SonarQube เบซเบผเบธเบเบฅเบปเบเบเบปเบเปเบเปเบฎเบฑเบเปเบ dashboard เบเบฝเบง, เบฎเบฑเบเบชเบฒเบเบฐเบซเบงเบฑเบเบเบฒเบเปเบฅเปเบเปเบฅเบฐเบเบฑเปเบเบเบฑเปเบเบเบถเปเบเบเปเบงเบเปเบซเปเบเปเบฒเบเปเบซเบฑเบเปเบเบงเปเบเปเบกเบเบปเปเบงเปเบเบเบญเบเบเบฒเบเบเปเบฝเบเปเบเบเปเบเบเบธเบเบเบฐเบเบฒเบเบเบญเบเบเบญเบเปเบงเปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒ.
เบฅเบฒเบเบฅเบฐเบญเบฝเบเปเบเบตเปเบกเปเบเบตเบกเบชเบฒเบกเบฒเบเบเบปเบเปเบเปเบเบตเป
เบเปเบฒเบเบงเบเบเบฐเบซเบเบฒเบเปเบซเบเปเบเบญเบเบเบฒเบชเบฒเบเบฒเบเบเบฝเบเปเบเบฅเปเบเบฅเบกเปเบเปเบฎเบฑเบเบเบฒเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบ. เบเบฒเบเบเบฑเบเบชเบดเบเปเบเบเบเปเปเบกเบนเบเบเบฒเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเปเบฒเบเปเบเบดเบ, เปเบซเบผเบปเปเบฒเบเบตเปเปเบกเปเบเบซเบผเบฒเบเบเปเบงเบฒ 25 เบเบฒเบชเบฒ. เปเบเบทเปเบญเบฎเบญเบเบฎเบฑเบเบเบฒเบชเบฒเบชเบฐเปเบเบฒเบฐ, เบเปเบฒเบเบเปเบญเบเบเบดเบเบเบฑเปเบ plugin เบเบตเปเปเบซเบกเบฒเบฐเบชเบปเบก. เบชเบฐเบเบฑเบเบเบธเบกเบเบปเบเบเบฐเบเบญเบเบกเบต plugin เบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบ Javascript (เบฅเบงเบกเบเบฑเบ typesัript), เปเบเบดเบเปเบกเปเบเบงเปเบฒ wiki เปเบงเบปเปเบฒเบงเปเบฒเบเบปเบเบเบฑเบเบเปเบฒเบก. เบซเบฅเบฑเบ Javascript plugin เบเปเบฒเบเบญเบ SonarJS, เบชเปเบฒเบฅเบฑเบ Typescript SonarTS respectively
เบฅเบนเบเบเปเบฒเบขเปเบฒเบเปเบเบฑเบเบเบฒเบเบเบฒเบเบเบทเบเบเปเบฒเปเบเปเปเบเบทเปเบญเบชเบปเปเบเบเปเปเบกเบนเบเบเบฒเบเบเบธเปเบกเบเบญเบ sonarqube-เปเบเบทเปเบญเบเบชเบฐเปเบเบ, เบเบตเป, เบเบฒเบเบเปเบฒเปเบเปเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฒเบ config-file, เบชเบปเปเบเบเปเปเบกเบนเบเบเบตเปเปเบเบซเบฒเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบ soundQube เบชเปเบฒเบฅเบฑเบเบเบฒเบเบฅเบงเบกเปเบฅเบฐเบเบฒเบเบฅเบงเบเบฅเบงเบกเบเบทเปเบกเบญเบตเบ.
เปเบ Javascript เบกเบตเปเบกเปเบ
เปเบเบทเปเบญเบเบณเปเบเปเปเบเบตเบเปเบงเบต soundQube เปเบซเปเปเบฎเบปเบฒเปเบเปเบเบฐเปเบซเบเบ docker-compose.
sonar.yaml:
version: '1'
services:
simplesample-sonar:
image: sonarqube:lts
ports:
- 9001:9000
- 9092:9092
network_mode: bridge
เปเบเบตเบเบเบปเบง:
docker-compose -f sonar.yml up
เบซเบผเบฑเบเบเบฒเบเบเบตเป soundQube เบเบฐเบกเบตเบขเบนเป:
เบเบฑเบโเบเปเปโเบกเบตโเปเบเบโเบเบฒเบโเบขเบนเปโเปเบโเบกเบฑเบโเปเบเบทเปเบญโเปเบฅเบฐโเบงเปเบฒโเปเบกเปเบโเบเบธโเบเบดโเบเปเบฒโ. เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเปเปเบเบชเบฐเบเบฒเบเบฐเบเบฒเบเบเบตเป. เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเปเบญเบปเบฒเปเบเบเบเบฒเบเบเบปเบงเบขเปเบฒเบเบขเปเบฒเบเปเบเบฑเบเบเบฒเบเบเบฒเบเบชเปเบฒเบฅเบฑเบ VueJS+TS+Jest. เปเบซเปเบเบงเบเปเบฎเบปเบฒเบเบปเปเบกเปเบชเปเบเบปเบงเปเบฎเบปเบฒเปเบญเบ:
git clone https://github.com/vuejs/vue-test-utils-typescript-example.git
เบเปเบฒเบญเบดเบเบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบเบดเบเบเบฑเปเบเบฅเบนเบเบเปเบฒ soundQube, เปเบเบดเปเบเปเบญเบตเปเบเบงเปเบฒ sonar-เบชเบฐเปเบเบเบชเบณ เบฅเบฑเบ npm เบกเบต wrapper เปเบเบฑเบ:
yarn add sonarqube-scanner
เปเบฅเบฐเบเบฑเบเบเบตเปเบเบตเปเบกเบเปเบฒเบชเบฑเปเบเปเบชเป scripts เปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบกเบฑเบ.
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'เบ;
- sonar.projectKey โ เบเบปเบงเบฅเบฐเบเบธเปเบเบเบเบฒเบเบเบตเปเปเบเบฑเบเปเบญเบเบฐเบฅเบฑเบเปเบเปเบเบตเบเปเบงเบต sonar'เบ;
- sonar.projectName โ เบเบทเปโเบเบญเบโเบเบปเบโ, เบกเบฑเบโเบชเบฒโเบกเบฒเบโเปเบเปโเบฎเบฑเบโเบเบฒเบโเบเปเบฝเบโเปเบเบโเปเบเปโเบเบธเบโเปเบงโเบฅเบฒโ, เบเบฑเบโเบเบฑเปเบโเปเบเปโเปเบเบโเบเบฒเบโเปเบเปโเบเบทเบโเบเปเบฒโเบเบปเบโเปเบเบโ เบฅเบฐเบซเบฑเบเปเบเบเบเบฒเบ;
- sonar.เปเบซเบผเปเบ - เปเบเบเปเบเบตเบเบตเปเบกเบตเปเบซเบผเปเบ, เบเบปเบเบเบฐเบเบดเปเบฅเปเบงเบเบตเป src, เปเบเปเบชเบฒเบกเบฒเบเปเบเบฑเบเบญเบฑเบเปเบเบเปเปเบเป. เปเบเบเปเบเบตเบเบตเปเบเบทเบเบเบฑเปเบเบเบทเปเบเบเบฑเบเปเบเบเปเบเบตเบฎเบฒเบ, เปเบเบดเปเบเปเบเบฑเบเปเบเบเปเบเบตเบเบตเปเปเบเบทเปเบญเบเบชเบฐเปเบเบเบเบทเบเปเบเบตเบเบเบปเบง;
- sonar.tests - เบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเบเบตเปเปเบเบเบฝเบเบเบนเปเบเบฑเบเบญเบฑเบเบเบตเปเบเปเบฒเบเบกเบฒ. เบเบตเปเปเบกเปเบเปเบเบเปเบเบตเบเบตเปเบเบฒเบเบเบปเบเบชเบญเบเบเบฑเปเบเบขเบนเป. เปเบเปเบเบเบเบฒเบเบเบตเป, เบเปเปเบกเบตเปเบเบเปเบเบตเบเบฑเปเบเบเปเบฒเบง, เปเบฅเบฐเบเบฒเบเบเบปเบเบชเบญเบเปเบกเปเบเบเบฑเปเบเบขเบนเปเบเปเปเปเบเบเบฑเบเบญเบปเบเบเบฐเบเบญเบเบเบตเปเบเบทเบเบเบปเบเบชเบญเบเบขเบนเปเปเบเปเบเบเปเบเบต 'เบเบฒเบเบเบปเบเบชเบญเบ', เบเบฑเปเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเบเบฐเบเปเปเบชเบปเบเปเบเบกเบฑเบเบชเปเบฒเบฅเบฑเบเปเบเบเบฑเบเบเบธเบเบฑเบเปเบฅเบฐเบเปเบฒเปเบเปเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเบเปเปเปเบ;
- sonar.test.inclusions - เปเบชเบฑเปเบเบเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบปเบเบชเบญเบเปเบเบเปเบเปเบซเบเปเบฒเบเบฒเบ, เบญเบฒเบเบเบฐเบกเบตเบญเบปเบเบเบฐเบเบญเบเบเปเบฒเบเบงเบเบซเบเบถเปเบเบเบตเปเปเบเบเบญเบญเบเบเปเบงเบเปเบเบทเปเบญเบเปเบฒเบเบเบธเบ;
- sonar.sourceEncoding - เบเบฒเบโเปเบเบปเปเบฒโเบฅเบฐโเบซเบฑเบโเบชเปเบฒโเบฅเบฑเบโเปเบเบฅโเปโเบเบตเปโเบกเบฒโ.
เบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบตเบเบเบปเบงเบเบฑเปเบเบเปเบฒเบญเบดเบเบเบญเบเปเบเบทเปเบญเบเบชเบฐเปเบเบ, เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบกเปเบเบเบฝเบกเบเปเบญเบก, เบเบปเบเปเบงเบฑเปเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเปเบญเบเบซเบเปเบฒเบเบปเปเบเบเป: เบเบฒเบเปเบเบตเบเบเบปเบงเปเบเบทเปเบญเบเบเบฑเบเบเบฒเบเบเบปเบเบชเบญเบเบเบปเบงเบกเบฑเบเปเบญเบ, เปเบเบทเปเบญเปเบซเปเบกเบฑเบเบชเบฒเบกเบฒเบเบชเปเบฒเบเบเปเปเบกเบนเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบธเปเบกเบเบญเบ, เปเบเบดเปเบเปเบเบทเปเบญเบเบชเบฐเปเบเบเบเบฐเปเบเปเปเบเบเบฒเบเบซเบฅเบฑเบ.
เปเบเปเปเบเบทเปเบญเปเบฎเบฑเบเบชเบดเปเบเบเบตเป, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเปเบฒเบเบปเบเปเบเบทเปเบญเบเบเบฑเบเบเบฒเบเบเบปเบเบชเบญเบเปเบเบทเปเบญเบชเปเบฒเบเบเปเปเบกเบนเบเบเบตเป. เปเบเปเบเบเบเบฒเบเบเบตเป, เปเบเบทเปเบญเบเบเบฑเบเบเบฒเบเบเบปเบเบชเบญเบเปเบกเปเบ เบกเบต. เปเบฅเบฐเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบญเบเบกเบฑเบเบขเบนเปเปเบเบชเปเบงเบเบเบตเปเบชเบญเบเบเปเบญเบเบเบฑเบเบเบญเบเปเบเบฅเป เบเบธเบ .json.
เบกเบฒเปเบเบตเปเบกเบเบฒเบเบเบฑเปเบเบเปเบฒเปเบซเบผเบปเปเบฒเบเบตเป:
"collectCoverage": true,
"collectCoverageFrom": [
"src/**/*",
"!src/main.ts",
"!src/App.vue",
"!src/**/*.d.*",
"!src/**/*__tests__*"
],
เบเบฑเปเบเปเบกเปเบ, เบเบงเบเปเบฎเบปเบฒเบเปเบฒเบเบปเบเบเบธเบเบเบปเบงเบกเบฑเบเปเบญเบเบชเปเบฒเบฅเบฑเบเบเบงเบฒเบกเบเปเบญเบเบเบฒเบเบเบตเปเบเบฐเบเบดเบเปเบฅเปเบเบฒเบเบเบธเปเบกเบเบญเบเปเบฅเบฐเปเบซเบผเปเบ (เบเปเบญเบกเบเบฑเบเบเปเปเบเบปเบเปเบงเบฑเปเบ) เบเบปเบเบเบทเปเบเบเบฒเบเบเบตเปเบกเบฑเบเบเบฐเบเบทเบเบชเปเบฒเบเบเบฑเปเบเบเบถเปเบ.
เบเบญเบเบเบตเปเปเบซเปเบเปเบฒเปเบเบตเบเบเบฒเบเบเบปเบเบชเบญเบ:
yarn test
เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบซเบฑเบเบเบฑเปเบเบเปเปเปเบเบเบตเป:
เปเบซเบเบเบปเบเปเบกเปเบเบงเปเบฒเบเปเปเบกเบตเบฅเบฐเบซเบฑเบเบขเบนเปเปเบเบญเบปเบเบเบฐเบเบญเบเบเบญเบเบกเบฑเบเปเบญเบ. เปเบซเปเปเบเปเปเบเบเบตเป.
HelloWorld.vue:
...
methods: {
calc(n) {
return n + 1;
}
},
mounted() {
this.msg1 = this.msg + this.calc(1);
},
...
เบเบตเปเบเบฐเบเบฝเบเบเปเบเบตเปเบเบฐเบเบดเบเปเบฅเปเบเบฒเบเบเบธเปเบกเบเบญเบ.
เบซเบผเบฑเบโเบเบฒเบโเบเบฒเบ restart เบเบฒเบโเบเบปเบโเบชเบญเบโ, เบเบงเบโเปเบฎเบปเบฒโเบเบฐโเปเบฎเบฑเบโเปเบซเปโเปเบเปโเปเบเบงเปโเบฒโเบเบตเปโ:
เปเบเบซเบเปเบฒเบเปเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบงเบเบเบฐเปเบซเบฑเบเบเปเปเบกเบนเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบธเปเบกเบเบญเบ, เปเบฅเบฐเปเบเบเปเบเบตเบเบฐเบเบทเบเบชเปเบฒเบเบเบทเปเบเปเบเปเบเบเปเบเบตเปเบเบเบเบฒเบ เบเบฒเบเบเบธเปเบกเบเบญเบ เบเบฑเบเบเปเปเบกเบนเบเบเบฒเบเบเบปเบเบชเบญเบเบเบฒเบเบเบธเปเบกเบเบญเบเปเบเบฎเบนเบเปเบเบเบเบปเปเบงเปเบ LCOV (เบชเปเบงเบเบเบฐเบซเบเบฒเบ LTP GCOV).
Gcov เปเบเบฑเบโเบเบฐโเปเบซเบเบโเปเบเบโเบขเบฒเบ freely เบชเปเบฒโเบฅเบฑเบโเบเบฒเบโเบเบงเบโเบชเบญเบโเบเบฒเบโเบเบธเปเบกโเบเบญเบโเบฅเบฐโเบซเบฑเบโ. Gcov เบชเปเบฒเบเบเปเบฒเบเบงเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบตเปเปเบเปเบเบญเบเบชเปเบฒเบฅเบฑเบเปเบเปเบฅเบฐเบเปเบฒเบเบฐเปเบซเบผเบเปเบเปเบเบเบเบฒเบเปเบฅเบฐเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเปเบฒเบเปเบเบตเปเบกเบเปเบฒเบเบฑเบเบเบฒเบเปเบชเปเบฅเบฐเบซเบฑเบเปเบซเบผเปเบ. Gcov เบกเบฒเปเบเบฑเบเบเบปเบเบเบฐเปเบซเบเบเบกเบฒเบเบเบฐเบเบฒเบเปเบเบฑเบเบชเปเบงเบเบซเบเบถเปเบเบเบญเบเบเบธเบ GCC.
Lcov - เบเบฒเบเปเบเปเบเบญเบเบฎเบนเบเบเบฒเบเบชเปเบฒเบฅเบฑเบ gcov. เบกเบฑเบเบเบฐเบเบญเบเปเบเบฅเป gcov เบชเปเบฒเบฅเบฑเบเปเบเบฅเปเปเบซเบผเปเบเบซเบผเบฒเบเปเบฅเบฐเบเบฐเบฅเบดเบเบเบธเบเบเบญเบเบซเบเปเบฒ HTML เบเบตเปเบกเบตเบฅเบฐเบซเบฑเบเปเบฅเบฐเบเปเปเบกเบนเบเบเบฒเบเบเบธเปเบกเบเบญเบ. เบซเบเปเบฒเปเบงเบฑเบเบเบฑเบเบเบทเบเบชเปเบฒเบเบเบทเปเบเปเบเบทเปเบญเปเบฎเบฑเบเปเบซเปเบเบฒเบเบเปเบฒเบเบฒเบเบเปเบฒเบเบเบถเปเบ. Lcov เบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบเบฒเบเบเบธเปเบกเบเบญเบเบชเบฒเบ, เบซเบเปเบฒเบเบตเป, เปเบฅเบฐเบชเบฒเบเบฒ.
เบซเบผเบฑเบเบเบฒเบเบเบฒเบเบเบปเบเบชเบญเบเบชเปเบฒเปเบฅเบฑเบ, เบเปเปเบกเบนเบเบเบฒเบเบเบธเปเบกเบเบญเบเบเบฐเบเบทเบเบเบฑเปเบเบขเบนเปเปเบ coverage/lcov.info.
เบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบงเบปเปเบฒ sonar'เบเปเบญเบเบชเบฒเบกเบฒเบเปเบญเบปเบฒเบกเบฑเบเบกเบฒเบเบฒเบเปเบช? เบเบฑเปเบเบเบฑเปเบ, เปเบซเปเปเบเบตเปเบกเปเบชเบฑเปเบเบเปเปเปเบเบเบตเปเปเบชเปเปเบเบฅเปเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบญเบเบกเบฑเบ. เปเบเปเบกเบตเบเบธเบเบซเบเบถเปเบ: เปเบเบเบเบฒเบเบชเบฒเบกเบฒเบเบกเบตเบซเบผเบฒเบเบเบฒเบชเบฒ, เบเบฑเปเบเปเบกเปเบ, เปเบเปเบเบเปเบเบต src เบกเบตเบฅเบฐเบซเบฑเบเปเบซเบผเปเบเบชเปเบฒเบฅเบฑเบเบซเบฅเบฒเบเบเบฒเบชเบฒเบเบฒเบเบเบฝเบเปเบเบฅเปเบเบฅเบกเปเบฅเบฐเบเบฒเบเปเบเบทเปเบญเบกเปเบเบเบเบฑเบเบซเบเบถเปเบเบซเบผเบทเบญเบทเปเบ, เปเบฅเบฐเปเบเบเบฒเบเบเบฑเบเบเบฑเบ, เบเบฒเบเบเปเบฒเปเบเปเบซเบเบถเปเบเบซเบผเบท plugin เบญเบทเปเบเบเบทเบเบเปเบฒเบเบปเบเปเบเบเบเบฒเบเบเบฐเบซเบเบฒเบเบเบญเบเบกเบฑเบ. เปเบฅเบฐเบเปเปเบกเบนเบเบเบฒเบเบเบธเปเบกเบเบญเบเบชเบฒเบกเบฒเบเบเบทเบเปเบเบฑเบเปเบงเปเปเบเบชเบฐเบเบฒเบเบเบตเปเบเปเบฒเบเปเบชเปเบฒเบฅเบฑเบเบเบฒเบชเบฒเบเบฒเบเบเบฝเบเปเบเบผเปเบเบผเบกเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบ, เบเบฑเปเบเบเบฑเปเบเปเบเปเบฅเบฐเบเบฒเบชเบฒเบกเบตเบชเปเบงเบเบเบญเบเบเบปเบเปเบญเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบตเป. เปเบเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบเป เบเบปเบงเบญเบฑเบเบชเบญเบ, เบเบฑเปเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเบเบฒเบเบชเปเบงเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฝเบเปเบเปเบชเปเบฒเบฅเบฑเบเบกเบฑเบ:
sonar-project.properties:
sonar.typescript.coveragePlugin=lcov
sonar.typescript.lcov.reportPaths=coverage/lcov.info
เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบกเปเบเบเบฝเบกเบเปเบญเบกเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบตเบเบเบปเบงเบเบฑเปเบเบเปเบฒเบญเบดเบเบเบญเบเปเบเบทเปเบญเบเบชเบฐเปเบเบ. เบเปเบฒเบเบฐเปเบเบปเปเบฒเบขเบฒเบเบเบฐเบชเบฑเบเปเบเบเบงเปเบฒเปเบเบเบเบฒเบเปเบกเปเบ sonar'e เบเบทเบเบชเปเบฒเบเบเบทเปเบเปเบเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบเปเบเบเบฑเปเบ เบเบณ เบญเบดเบเบเบตเปเบเปเบฒเบเปเบฅเปเบเปเบเบทเปเบญเบเบชเบฐเปเบเบ เบชเบณ เบฅเบฑเบเปเบเบเบเบฒเบเปเบ เปเบถเปเบ. เปเบเปเบงเบฅเบฒเบเปเปเบกเบฒ, เบเปเปเบกเบนเบเบเบฐเบเบทเบเบชเบฐเบชเบปเบกเปเบเบทเปเบญเปเบเบดเปเบเบเบฒเบเบเปเบฝเบเปเบเบเบเบญเบเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเบเบญเบเปเบเบเบเบฒเบเปเบเปเบฅเบเบฐเปเบงเบฅเบฒ.
เบเบฑเปเบเบเบฑเปเบ, เปเบซเปเปเบเปเบเปเบฒเบชเบฑเปเบเบเบตเปเบชเปเบฒเบเบเบถเปเบเบเปเบญเบเบซเบเปเบฒเบเบฑเปเบ เบเบธเบ .json:
yarn run sonar
เบซเบกเบฒเบเปเบซเบ: เบเปเบฒเบเบเบฑเบเบชเบฒเบกเบฒเบเปเบเปเบเบฒเบฅเบฒเบกเบดเปเบเบตเปเบเป -X เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฑเบเบเบถเบเบฅเบฒเบเบฅเบฐเบญเบฝเบเปเบเบตเปเบกเปเบเบตเบก.
เบเปเบฒเปเบเบทเปเบญเบเบชเบฐเปเบเบเบเบทเบเปเบเบตเบเบเบปเบงเบเบฑเปเบเบเปเบฒเบญเบดเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, binary เบเบญเบเปเบเบทเปเบญเบเบชเบฐเปเบเบเบเบปเบงเบกเบฑเบเปเบญเบเบเบฐเบเบทเบเบเบฒเบงเปเบซเบผเบเบเปเบญเบ. เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบกเบฑเบเปเบฅเบตเปเบกเบเบปเปเบเปเบฅเบฐเปเบฅเบตเปเบกเบเบปเปเบเบเบฒเบเบชเบฐเปเบเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบ sonar'a เบชเปเบฒเบฅเบฑเบ plugins เบเบตเปเบเบดเบเบเบฑเปเบ, เบเบฑเปเบเบเบฑเปเบเบเบฒเบเบเบดเบเปเบฅเปเบเบฒเบชเบฒเบเบตเปเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบ. เบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเบญเบทเปเบเปเบเบตเปเบซเบผเบฒเบเบซเบผเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบญเบเบกเบฑเบเปเบกเปเบเบเบฑเบเปเบซเบฅเบ: เปเบเบฃเปเบเบฅเปเบเบธเบเบเบฐเบเบฒเบ, เบเบปเบเบฅเบฐเบเบฝเบเบเบฒเบเปเบเบทเปเบญเบเปเบซเบง, เบเบฑเบเปเบเบฑเบเบกเปเบฝเบ metrics, เบเบปเบเบฅเบฐเบเบฝเบเบเบญเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบ.
เบซเบกเบฒเบเปเบซเบ: เบเบงเบเปเบฎเบปเบฒเบเบฐเบเปเปเบญเบฒเปเบชเบขเบนเปเบเบฑเบเบเบงเบเบกเบฑเบเปเบเบฅเบฒเบเบฅเบฐเบญเบฝเบเบเบฒเบเปเบเบเบญเบเบเบญเบเบเบปเบเบเบงเบฒเบกเบเบตเป, เปเบเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเบดเบเบเปเปเบเบฑเบเปเบซเบผเปเบเบเบตเปเปเบเบฑเบเบเบฒเบเบเบฒเบเปเบเปเบเบฐเบซเบผเบญเบเปเบงเบฅเบฒ.
เบเปเปเปเบ, เบเบฒเบเบงเบดเปเบเบฒเบฐเปเบเบเปเบเบตเปเบฅเบตเปเบกเบเบปเปเบ src เบชเปเบฒเบฅเบฑเบเบเบฒเบเบกเบตเปเบเบฅเปเปเบซเบผเปเบเบชเปเบฒเบฅเบฑเบเบเบธเบเบเบปเบ (เบเปเบฒเบซเบฒเบเบงเปเบฒเบชเบฐเปเบเบฒเบฐเปเบเบซเบเบถเปเบเบเปเปเปเบเปเบฅเบฐเบเบธเบขเปเบฒเบเบเบฑเบเปเบเบ) เบเบฒเบชเบฒเบเบตเปเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบ, เบเปเบงเบเบเบฒเบเบเบฑเบเบชเบฐเบเบตเบเปเปเบกเบฒเบเบญเบเบเบงเบเปเบเบปเบฒ.
เบเปเปเปเบเปเบกเปเบเบเบฒเบเบงเบดเปเบเบฒเบฐเบญเบทเปเบเป, เปเบเบดเปเบเบเบงเบเปเบฎเบปเบฒเบเปเปเปเบเปเบชเบธเบกเปเบชเปเปเบเบเบปเบเบเบงเบฒเบกเบเบตเป (เบเบปเบงเบขเปเบฒเบเปเบเบฑเปเบ: linting, เบเบฒเบเบเบงเบเบชเบญเบเบเบฒเบเบเปเปเบฒเบเปเบญเบเบเบญเบเบฅเบฐเบซเบฑเบ, เปเบฅเบฐเบญเบทเปเบเป).
เปเบเบเบญเบเบเปเบฒเบเบเบญเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบญเบเปเบเบทเปเบญเบเบชเบฐเปเบเบ, เบเปเปเบกเบนเบเบเบฑเบเบซเบกเบปเบเบเบตเปเปเบเบฑเบเบเปเบฒเปเบเปเบเบทเบเบฅเบงเบเบฅเบงเบก, เปเบเบฑเบเปเบงเปเปเบฅเบฐเบเบทเบเบชเบปเปเบเปเบเบซเบฒเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบ.
เบซเบผเบฑเบเบเบฒเบเบเบตเป, เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบซเบฑเบเบชเบดเปเบเบเบตเปเปเบเบตเบเบเบถเปเบเปเบเบเบฒเบเปเบเปเบเบญเบเบเบญเบเปเบงเบฑเบ:
เบเบฑเปเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบซเบฑเบเปเบเป, เบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบเปเบฎเบฑเบเบงเบฝเบ, เปเบฅเบฐเปเบกเปเบเบฐเบเบฑเปเบเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเบเบฒเบเบเบฐเปเบเบเบเบญเบเบเบฒเบเบเบธเปเบกเบเบญเบ, เปเบเปเบกเบฑเบเบเปเปเบเบปเบเบเบฑเบเบเบงเบเปเบฎเบปเบฒ เบกเบต- เบฅเบฒเบโเบเบฒเบโ.
เปเบซเปเบเบดเบเบญเบญเบ. เปเบซเปเปเบเบดเปเบเปเบเบเบเบฒเบเปเบเบฅเบฒเบเบฅเบฐเบญเบฝเบเปเบเบตเปเบกเปเบเบตเบก, เปเบซเปเบเบฅเบดเบเปเบชเปเบกเบนเบเบเปเบฒเบเบฒเบเบเบธเปเบกเบเบญเบ, เปเบฅเบฐ "เบเบปเบเบฅเบปเบ" เปเบเบปเปเบฒเปเบเปเบเบเบปเบเบฅเบฒเบเบเบฒเบเปเบญเบเบฐเบชเบฒเบเบฅเบฒเบเบฅเบฐเบญเบฝเบ:
เปเบเบเบตเปเบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบซเบฑเบ, เบเบญเบเปเบซเบเบทเบญเปเบเบเบฒเบเปเบญเบเบฐเบชเบฒเบเบเบปเปเบเบเป, เบเบงเบเบชเบญเบ HelloWorld.vue, เบเบฑเบเบกเบตเปเบเบฅเป main.ts, เปเบเบดเปเบเปเบฎเบฑเบเปเบซเปเปเบชเบเบเบฒเบเบเบฑเบเปเบปเบเบเบญเบเบเบฒเบเบเบธเปเบกเบเบญเบ. เปเบเปเบงเบดเบเบตเบเบฒเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบเปเบเบปเบเปเบงเบฑเปเบเบกเบฑเบเบเบฒเบเบเบฒเบเบเบดเบเปเบฅเปเบเบฒเบเบเบธเปเบกเบเบญเบ. เปเบกเปเบเปเบฅเปเบง, เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบกเปเบเบเบทเบเบเปเบญเบ, เปเบเปเบกเบฑเบเบขเบนเปเปเบเบฅเบฐเบเบฑเบ เบกเบต, เปเบเปเปเบเบทเปเบญเบเบชเบฐเปเบเบเบเบฑเบเบชเบฐเบเบตเบกเบฑเบ, เบชเบฐเบเบฑเปเบเบกเบฑเบเบชเบดเปเบเบชเบธเบเบฅเบปเบเปเบเบเบฒเบเบเบดเบเปเบฅเปเบเบญเบเบกเบฑเบ.
เปเบซเปเปเบเปเปเบเบเบฑเบเบซเบฒเบเบตเป:
sonar-project.properties:
...
sonar.exclusions=src/main.ts
...
เบเปเบญเบเบเปเบญเบเบเบฒเบเบเบงเบฒเบกเบเบฐเบเปเบฒเบเปเบเปเบ: เบเบญเบเบเบฒเบเปเบเบเปเบเบตเบเบตเปเบฅเบฐเบเบธเปเบงเปเปเบเบเบฒเบฅเบฒเบกเบดเปเบเบตเบเบตเป, เปเบเบเปเบเบตเบเบฑเบเบซเบกเบปเบเบเบตเปเบฅเบฐเบเบธเปเบงเปเปเบเบเบฒเบฅเบฒเบกเบดเปเบเบตเบเปเปเบเบทเบเปเบเบตเปเบกเปเบเบปเปเบฒ. sonar.test.inclusions.
เบซเบผเบฑเบเบเบฒเบเปเบเบตเบเปเบเบทเปเบญเบเบชเบฐเปเบเบ, เบเบงเบเปเบฎเบปเบฒเปเบซเบฑเบเบเปเปเบกเบนเบเบเบตเปเบเบทเบเบเปเบญเบ:
เบเปโเปเบซเปโเปเบเบดเปเบโเปเบโเบเบธเบโเบเปเปโเปเบ - เปเบเบผเปเบเบฅเปเบเบธเบเบเบฐเบเบฒเบ. เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเปเบงเบปเปเบฒเบเปเบฒเบเปเบเบดเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบ sonar'om เบซเบผเบฒเบเบเบฒเบชเบฒเปเบเปเบงเบฅเบฒเบเบฝเบงเบเบฑเบ. เบเบตเปเปเบกเปเบเบชเบดเปเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบฒเบฅเบฑเบเปเบซเบฑเบเปเบเปเป. เปเบเปเบเบงเบเปเบฎเบปเบฒเบฎเบนเปเบงเปเบฒเปเบเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบทเบเบเบฝเบเปเบงเปเปเบ TS, เบเบฑเปเบเบเบฑเปเบเปเบเบฑเบเบซเบเบฑเบเบเบถเปเบเปเบกเบทเปเบญเบเปเบเบทเปเบญเบเบชเบฐเปเบเบเบเปเบงเบเบเบฒเบเบซเบกเบนเบเปเบเปเปเบฅเบฐเบเบฒเบเบเบงเบเบชเบญเบเบเบตเปเบเปเปเบเปเบฒเปเบเบฑเบ. เบเบงเบเปเบฎเบปเบฒเบเบฐเบเปเบฒเบเบปเบเบเบฒเบชเบฒเบชเปเบฒเบฅเบฑเบเบเบฒเบเบงเบดเปเบเบฒเบฐเปเบเบเบเบฒเบเปเบเบตเปเบกเบซเบเบถเปเบเบเบฒเบฅเบฒเบกเบดเปเบเบตเปเบเบตเปเบกเปเบเบตเบกเบเบฑเบเปเบเบฅเปเบเบฒเบเบเบฑเปเบเบเปเบฒ sonar'A:
sonar-project.properties:
...
sonar.language=ts
...
เบฅเบญเบเปเบฅเปเบเปเบเบทเปเบญเบเบชเบฐเปเบเบเบญเบตเบเบเบฑเปเบ เปเบฅเบฐเปเบเบดเปเบเบเบปเบ:
เบเบฒเบเบเบธเปเบกเบเบญเบเปเบเปเบซเบกเบปเบเปเบ.
เบเปเบฒเบเบงเบเปเบฎเบปเบฒเปเบเบดเปเบเบเบฑเบเบเบถเบเบเบญเบเปเบเบทเปเบญเบเบชเบฐเปเบเบ, เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบซเบฑเบเปเบชเบฑเปเบเบเปเปเปเบเบเบตเป:
เบเบฑเปเบเปเบกเปเบ, เปเบเบฅเปเปเบเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบฝเบเปเบเปเบเปเปเปเบเปเบเบทเบเบเบฑเบเบชเบฐเบเบต.
เบชเบฐเบเบฒเบเบฐเบเบฒเบเปเบกเปเบเบเบฑเปเบเบเปเปเปเบเบเบตเป: เบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบขเปเบฒเบเปเบเบฑเบเบเบฒเบเบเบฒเบ VueJs เบขเบนเปเปเบ plugin SonarJSเบเบนเปเบเบตเปเบฎเบฑเบเบเบดเบเบเบญเบ Javascript.
เปเบเปเบเบฒเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบเบตเปเบเปเปเปเบกเปเบเบขเบนเปเปเบ plugin SonarTS เบเบฒเบ TS, เบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบตเปเบเบตเปเบขเปเบฒเบเปเบเบฑเบเบเบฒเบเบเบฒเบเปเบเปเปเบเบตเบเบขเบนเปเปเบเบเบปเบงเบเบดเบเบเบฒเบกเปเบกเบเปเบกเป sonar'A:
เบเบตเปเปเบกเปเบเบเบฒเบเบเปเบฒเบเบญเบเบเบฒเบเบซเบเบถเปเบเปเบเบเบนเปเบเบฒเบเบซเบเปเบฒเบเบฒเบเบเบฑเบเบเบฑเบเบเบฐเบเบฒ SonarQube, เบขเบทเบเบขเบฑเบเบเบงเบฒเบกเบเบดเบเบเบตเป.
เปเบเปเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบฎเบฑเบเบงเบฝเบเบชเปเบฒเบฅเบฑเบเบเบงเบเปเบฎเบปเบฒ, เบเปเบฒเบเบเบฑเบเบเปเบฒเบ. เปเบกเปเบเปเบฅเปเบง, เปเบซเปเบฅเบญเบเบกเบฑเบเปเปเบญเบเปเบถเปเบ "เปเบฎเบ".
เบเปเบฒเบกเบตเบเบฒเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบ .vue- เปเบเบฅโเปโ sonar'เปเบญเป, เปเบฅเปเบงเบฅเบญเบเบเบญเบเบฅเบฒเบงเปเบซเปเบเบดเบเบฒเบฅเบฐเบเบฒเปเบเบปเบฒเปเบเบปเปเบฒ เบเบปเบงเบญเบฑเบเบชเบญเบ.
เบกเบฒเปเบเบตเปเบกเบเบฒเบฃเบฒเบกเบดเปเบเบต:
sonar-project.properties:
...
sonar.typescript.file.suffixes=.ts,.tsx,.vue
...
เบกเบฒเปเบเบตเบเปเบเบทเปเบญเบเบชเบฐเปเบเบ:
เปเบฅเบฐ, voila, เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบกเปเบเบเบฑเบเบเบทเบเบชเบนเปเบเบปเบเบเบฐเบเบด, เปเบฅเบฐเบกเบตเปเบเบฃเปเบเบฅเปเบเบฝเบงเบชเปเบฒเบฅเบฑเบ เบเบปเบงเบญเบฑเบเบชเบญเบ. เบเบฑเปเบเปเบกเปเบ, เบเบงเบเปเบฎเบปเบฒเปเบเปเบเบฑเบเบเบฒเบเปเบเปเปเบเบเบฑเบเบซเบฒเปเบเบเบฒเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบ VueJs+TS เบเบฒเบ soundQube.
เปเบซเปเบเบฐเบเบฒเบเบฒเบกเบเปเปเปเบเปเบฅเบฐเบเบฑเบเบเบธเบเบเปเปเบกเบนเบเบเบฒเบเบเบธเปเบกเบเบญเบเปเบฅเบฑเบเบเปเบญเบ.
เบชเบดเปเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบเปเปเบฎเบฑเบเบกเบฒเปเบเบดเบเบเบญเบเบเบฑเปเบ:
- เปเบเบตเปเบกเปเบชเปเปเบเบเบเบฒเบ sonar- เปเบเบทเปเบญเบเบชเบฐเปเบเบ;
- เบเบฑเปเบโเบเปเบฒ เบกเบต เปเบเบทเปเบญเบชเปเบฒเบเบเปเปเบกเบนเบเบเบฒเบเบเบธเปเบกเบเบญเบ;
- เบเบณเบเบปเบเบเปเบฒ sonar- เปเบเบทเปเบญเบเบชเบฐเปเบเบ;
- เปเบเปโเปเบโเบเบฑเบโเบซเบฒโเบชเบฐโเบซเบเบฑเบโเบชเบฐโเบซเบเบนเบโ .vue-files + เบเบปเบงเบญเบฑเบเบชเบญเบ.
เบเบญเบเปเบซเบเบทเบญเบเบฒเบเบเบฒเบเบเบปเบเบชเบญเบเบเบฒเบเบเบธเปเบกเบเบญเบ, เบกเบตเปเบเบทเปเบญเบเปเบเบเบตเปเปเบเบฑเบเบเบฐเปเบซเบเบเบญเบทเปเบเปเบเบตเปเบซเบเปเบฒเบชเบปเบเปเบเบชเปเบฒเบฅเบฑเบเบเบธเบเบเบฐเบเบฒเบเบเบญเบเบฅเบฐเบซเบฑเบ, เบเบปเบงเบขเปเบฒเบ, เบเบฒเบเบเปเปเบฒเบเปเบญเบเบฅเบฐเบซเบฑเบเปเบฅเบฐเบเปเบฒเบเบงเบเบชเบฒเบ (เบเปเบฝเบงเบเปเบญเบเบเบฑเบเบเบฒเบเบเบดเบเปเบฅเปเบเปเบฒเบชเปเบฒเบเบฐเบชเบดเบเบเบตเปเบเปเบฝเบงเบเปเบญเบเบเบฑเบเบเบงเบฒเบกเบชเบฑเบเบชเบปเบเบเบญเบเบฅเบฐเบซเบฑเบ) เบเบญเบเปเบเบเบเบฒเบ.
เปเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเปเบเบเบฐเบเบธเบเบฑเบเบเบญเบ plugin เบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบ TS (SonarTS) เบเบฐเบเปเปเปเบฎเบฑเบเบงเบฝเบ CPD (Copy Paste Detector) เปเบฅเบฐเบเบฒเบเบเบฑเบเบชเบฒเบเบเบญเบเบฅเบฐเบซเบฑเบ .vue- เปเบเบฅโเปโ.
เปเบเบทเปเบญเบชเปเบฒเบเบชเบฐเบเบฒเบเบฐเบเบฒเบเบชเบฑเบเปเบเบฒเบฐเบเบญเบเบเบฒเบเบเปเปเบฒเบเปเบญเบเบฅเบฐเบซเบฑเบ, เบเบฝเบเปเบเปเปเบฎเบฑเบเบเปเปเบฒเปเบเบฅเปเบญเบปเบเบเบฐเบเบญเบเบเบตเปเบกเบตเบเบทเปเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบเปเบฅเบฐเปเบเบตเปเบกเบกเบฑเบเปเบชเปเบฅเบฐเบซเบฑเบ. main.ts เบเบฑเบเบเบฑเบ dummy เปเบฅเบฐเปเบฎเบฑเบเบเปเปเบฒเบกเบฑเบเบเปเบงเบเบเบทเปเบญเบทเปเบ. เปเบเบทเปเบญเบเบงเบเบชเบญเบเบเบฒเบเบเปเปเบฒเบเปเบญเบเปเบเบฑเปเบเปเบ .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
เปเบเปเบเบญเบ, เบเบฒเบเบเบธเปเบกเบเบญเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบฐเบซเบผเบธเบเบฅเบปเบ, เปเบเปเบเบญเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเปเปเบเปเบชเบปเบเปเบเปเบฅเบทเปเบญเบเบเบฑเปเบ.
เปเบเปเบเปเบเบญเบเบเบฒเบเบเปเปเบฒเบเบฑเบเบเบญเบเบฅเบฐเบซเบฑเบ, เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบซเบฑเบ:
เปเบเบทเปเบญเบเบงเบเบชเบญเบเบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเป CPD- เบเบปเบโเบเบฐโเปเบซเบเบ - jscpd:
npx jscpd src
เบชเปเบฒเบฅเบฑเบเปเบชเบฑเปเบเบฅเบฐเบซเบฑเบ:
เบเบฒเบเบเบตเบเบตเปเบเบฐเบเบทเบเปเบเปเปเบเปเบเบชเบฐเบเบฑเบ plugin เปเบเบญเบฐเบเบฒเบเบปเบ SonarJS(TS). เบเปเบฒโเบเบฐโเปเบเบปเปเบฒโเบขเบฒเบโเบเบฐโเบชเบฑเบโเปเบเบโเบงเปเบฒโเบเบงเบโเปเบเบปเบฒโเปเบเบปเปเบฒโเปเบกเปเบโเบเปเบญเบเปโเปเบฅเบตเปเบกโเบเบปเปเบโเบเบตเปโเบเบฐโเบฅเบงเบกโเบเบฑเบโเบชเบญเบ plugins เบเบตเปโเปเบเบฑเบโเบซเบเบถเปเบโ SonarJS, เบเบตเปเบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบดเบเบงเปเบฒเบเบทเบเบเปเบญเบ.
เบเบญเบเบเบตเปเบเปเบญเบเบขเบฒเบเบเบดเบเบฒเบฅเบฐเบเบฒเบเบฒเบเปเบฅเบทเบญเบเปเบเบเบฒเบเบเบฑเบเบเบธเบเบเปเปเบกเบนเบเบเบฒเบเบเบธเปเบกเบเบญเบ.
เบกเบฒเบฎเบญเบเบเบฐเบเบธ, เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบซเบฑเบเบเบฒเบเบเบธเปเบกเบเบญเบเบเบฒเบเบเบปเบเบชเบญเบเปเบเบเปเปเบเปเบฒเบเบปเบเบชเปเบงเบเบฎเปเบญเบเบชเปเบฒเบฅเบฑเบเปเบเบเบเบฒเบเบเบฑเบเบซเบกเบปเบ, เปเบฅเบฐเบชเปเบฒเบฅเบฑเบเปเบเบฅเปเปเบเบเบชเบฐเปเบเบฒเบฐ. เปเบเปเบกเบฑเบเปเบเบฑเบเปเบเปเบเปเบเบตเปเบเบฐเบเบฐเบซเบเบฒเบเบเบปเบงเบเบตเปเบงเบฑเบเบเบตเปเบเปเบงเบเบเปเปเบกเบนเบเบเปเบฝเบงเบเบฑเบเบเบฐเบฅเบดเบกเบฒเบ เบซเบเปเบงเบเบเปเบฅเบดเบเบฒเบ-tests เบชเปเบฒโเบฅเบฑเบโเปเบเบโเบเบฒเบโ, เปเบเบฑเปเบโเบเบฝเบงโเบเบฑเบโเบเบฑเบโเปเบโเบชเบฐโเบเบฒเบโเบเบญเบโเปเบเบฅโเปโ.
เบกเบตเบซเปเบญเบเบชเบฐเบซเบกเบธเบเบเบตเปเบชเบฒเบกเบฒเบ เบกเบต- เบเปเบฝเบโเบเบปเบโเบฅเบฒเบโเบเบฒเบโเปเบเบฑเบโเบฎเบนเบโเปเบเบโเบชเปเบฒโเบฅเบฑเบโเบเบฒเบโ sonar'A:
เบเปเปโเบกเบนเบโเบเบฒเบโเบเบปเบโเบชเบญเบโเบเบปเปเบงโเปเบโ -
เบกเบฒเบเบดเบเบเบฑเปเบเบซเปเบญเบเบชเบฐเปเบธเบเบเบตเปเปเบเปเบเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ:
yarn add jest-sonar-reporter
เปเบฅเบฐเปเบเบตเปเบกเบกเบฑเบเปเบชเปเบเบฒเบเบเบฑเปเบเบเปเบฒ เบกเบต:
package.json:
โฆ
"testResultsProcessor": "jest-sonar-reporter"
โฆ
เบเบญเบเบเบตเปเปเบซเปเบเปเบฒเปเบเบตเบเบเบฒเบเบเบปเบเบชเบญเบ:
yarn test
เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เปเบเบฅเปเบเบฐเบเบทเบเบชเปเบฒเบเบเบทเปเบเปเบเบฎเบฒเบเบเบญเบเปเบเบเบเบฒเบ test-report.xml.
เปเบซเปเปเบฎเบปเบฒเปเบเปเบกเบฑเบเปเบเบเบฒเบเบเบฑเปเบเบเปเบฒ sonar'A:
sonar-project.properties:
โฆ
sonar.testExecutionReportPaths=test-report.xml
โฆ
เปเบฅเบฐเบฃเบตเบชเบฐเบเบฒเบเปเบเบทเปเบญเบเบชเบฐเปเบเบ:
yarn run sonar
เปเบซเปเบเบญเบเปเบเบดเปเบเบชเบดเปเบเบเบตเปเบกเบตเบเบฒเบเบเปเบฝเบเปเบเบเปเบเบเบฒเบเปเบเปเบเบญเบ sonar'A:
เปเบฅเบฐเบเปเปเบกเบตเบซเบเบฑเบเบเปเบฝเบเปเบเบ. เบเบงเบฒเบกเบเบดเบเปเบกเปเบเบงเปเบฒ Sonar เบเปเปเปเบเปเบเบดเบเบฒเบฅเบฐเบเบฒเปเบเบฅเปเบเบตเปเบญเบฐเบเบดเบเบฒเบเปเบงเปเปเบเบเบปเบเบฅเบฒเบเบเบฒเบ Jest เปเบเบฑเบเปเบเบฅเป เบซเบเปเบงเบเบเปเบฅเบดเบเบฒเบ- เบเบฒเบโเบเบปเบโเบชเบญเบโ. เปเบเบทเปเบญเปเบเปเปเบเบชเบฐเบเบฒเบเบฐเบเบฒเบเบเบตเป, เบเบงเบเปเบฎเบปเบฒเปเบเปเบเบฒเบฅเบฒเบกเบดเปเบเบตเบเบฒเบเบเบฑเปเบเบเปเบฒ sonar sonar.tests, เบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเบเบตเปเบเบญเบเบขเปเบฒเบเบเบฑเบเปเบเบเปเบเบเปเบเบตเบเบตเปเบกเบตเบเบฒเบเบเบปเบเบชเบญเบ (เบเบงเบเปเบฎเบปเบฒเบกเบตเบเบฝเบเปเบเปเบซเบเบถเปเบเบชเปเบฒเบฅเบฑเบเปเบเบเบฑเบเบเบธเบเบฑเบ):
sonar-project.properties:
โฆ
sonar.tests=src/components/__tests__
โฆ
เบกเบฒเปเบฅเบตเปเบกเปเบเบทเปเบญเบเบชเบฐเปเบเบเปเปเป:
yarn run sonar
เบกเบฒเปเบเบดเปเบเบชเบดเปเบเบเบตเปเบกเบตเบเบฒเบเบเปเบฝเบเปเบเบเปเบเบเบฒเบเปเบเปเบเบญเบ:
เปเบเบเบฑเบเบเบธเบเบฑเบเบเบงเบเปเบฎเบปเบฒเปเบเปเปเบซเบฑเบเบเปเบฒเบเบงเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ เบซเบเปเบงเบเบเปเบฅเบดเบเบฒเบ-tests เปเบฅเบฐ, เบชเบปเบเบเบปเบเบชเปเบฒเปเบฅเบฑเบเปเบเบเบเบฒเบเบเบฅเบดเบเปเบชเปเบเบฒเบเปเบ, เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบซเบฑเบเบเบฒเบเปเบเปเบเบฐเบเบฒเบเบเบญเบเบเปเบฒเบเบงเบเบเบตเปเปเบเบเบฑเบเบเบฒเปเบเบฅเปเปเบเบเบเบฒเบ:
เบชเบฐเบซเบฅเบธเบ
เบเบฑเปเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเปเบเปเปเบเบดเปเบเปเบเบทเปเบญเบเบกเบทเบชเปเบฒเบฅเบฑเบเบเบฒเบเบงเบดเปเบเบฒเบฐเบขเปเบฒเบเบเปเปเปเบเบทเปเบญเบ soundQube. เบเบงเบโเปเบฎเบปเบฒโเปเบเปโเบเบฐโเบชเบปเบกโเบเบฐโเบชเบฒเบโเบขเปเบฒเบโเบชเปเบฒโเปเบฅเบฑเบโเบเบปเบโเปเบเบปเปเบฒโเปเบโเปเบโเปเบเบโเบเบฒเบโเปเบเบฑเบโเบฅเบฒเบโเบฅเบฑเบโเบญเบฑเบโเบชเบญเบโเปเบโ VueJs+TS. เปเบเปเปเบเบเบฑเบเบซเบฒเบเบงเบฒเบกเปเบเบปเปเบฒเบเบฑเบเปเบเปเบเบฒเบเบขเปเบฒเบ. เบเบงเบเปเบฎเบปเบฒเปเบเปเปเบเบตเปเบกเปเบเบทเปเบญเปเบเบเปเปเบกเบนเบเบเบญเบเบเบปเบงเบเบตเปเบงเบฑเบเบเบฒเบเบเบธเปเบกเบเบญเบเบเบฒเบเบเบปเบเบชเบญเบ. เปเบเบเบปเบเบเบงเบฒเบกเบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบเปเบเบงเบเปเบเบดเปเบเบเบฝเบเปเบเปเบซเบเบถเปเบเบเบญเบเปเบเบทเปเบญเบเปเบเบเบธเบเบเบฐเบเบฒเบเบเบญเบเบฅเบฐเบซเบฑเบ (เบเบฒเบเบเบตเบญเบฒเบเบเบฐเปเบเบฑเบเบซเบเบถเปเบเบเบปเปเบเบเป), เปเบเป soundQube เบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบกเบฒเบเบเบฐเบเบฒเบเบเบธเบเบเบฐเบเบฒเบเบญเบทเปเบเป, เบฅเบงเบกเบเบฑเบเบเบฒเบเบเบปเบเบชเบญเบเบเบงเบฒเบกเบเบญเบเปเบ. เปเบเปเบเปเปเปเบกเปเบเบเบธเบเบชเบปเบกเบเบฑเบเบเบฑเบเปเบปเบเปเบซเบผเบปเปเบฒเบเบตเปเบกเบตเบขเบนเปเปเบ เบเบธเบกเบเบปเบ- เบชเบฐโเบเบฑเบโ. เบซเบเบถเปเบเปเบเบฅเบฑเบเบชเบฐเบเบฐเบเบตเปเบซเบเปเบฒเบชเบปเบเปเบเปเบฅเบฐเปเบเบฑเบเบเบฐเปเบซเบเบเปเบกเปเบเบเบฒเบเปเบเบทเปเบญเบกเปเบเบ soundQube เบเบฑเบเบฅเบฐเบเบปเบเบเบฒเบเบเบฑเบเบเบฒเบเบเบฑเบเปเบเบฑเบเบฅเบฐเบซเบฑเบเบเปเบฒเบเป, เปเบเบฑเปเบ GitLab เปเบฅเบฐ BitBucket. เปเบเบทเปเบญเบเปเบญเบเบเบฑเบ merge pull(merge) เบเปเบฒเบฎเปเบญเบเบเป'a เปเบเบซเบฒเบชเบฒเบเบฒเบเบปเปเบเบเปเบเบญเบ repository เปเบเปเบงเบฅเบฒเบเบตเปเบเบฒเบเบเบธเปเบกเบเบญเบเบเบทเบเบเบธเบเปเบเบก. เปเบเปเบเบตเปเปเบกเปเบเปเบฅเบทเปเบญเบเบชเปเบฒเบฅเบฑเบเบเบปเบเบเบงเบฒเบกเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบเบซเบกเบปเบ.
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