SonarQube: TypeScriptin baseUrl- ja suhteellisten polkujen määritys => ongelma „Riippuvuuksien tulisi olla eksplisiittisiä“ (typescript:S4328)
Konteksti
- Käytetty ALM : Azure DevOps
- Käytetty CI-järjestelmä: Azure DevOps
- Skannerin komento käytetty, kun sovellettavissa (yksityiset tiedot peitetty):
- task: SonarCloudPrepare@1
inputs:
SonarCloud: 'SonarCloud-Clement'
organization: 'assoconnect'
scannerMode: 'CLI'
configMode: 'manual'
cliProjectKey: 'assoconnect_frontend'
cliProjectName: 'frontend'
cliProjectVersion: '$(Build.BuildNumber)'
cliSources: 'src'
extraProperties: |
sonar.tests=src
sonar.test.inclusions=**/__tests__/**
sonar.coverage.exclusions=src/pages/**
sonar.junit.reportPaths=junit.xml
sonar.typescript.lcov.reportPaths=coverage/lcov.info
sonar.typescript.tsconfigPath=tsconfig.json
displayName: 'Prepare SonarQube analysis'
- task: SonarCloudAnalyze@1
displayName: 'Run SonarQube analysis'
- task: SonarCloudPublish@1
inputs:
pollingTimeoutSec: '300'
displayName: 'Publish SonarQube analysis result'
- Talletuksen kielet: TypeScript
Havaittu ongelma
Kaikissa .tsx-tiedostoissamme imports-käytöissä meillä esiintyy "Riippuvuudet pitäisi olla eksplisiittisiä (typescript:S4328)"-ongelma.
Olemme määrittäneet baseUrl-asetuksen (https://www.typescriptlang.org/docs/handbook/module-resolution.html#base-url) tsconfig.json-tiedostossamme, jotta meidän ei tarvitse käsitellä suhteellisia polkuja. WebStorm vaikuttaa olevan kunnossa tämän asetuksen kanssa, eikä linteri näytä mitään viestiä. Mutta Sonarissa, kun tuomme moduulia, koska siinä ei ole ./ etuliitettä, se ajattelee sen olevan ulkoinen moduuli ja etsii sitä riippuvuuksista.
Esimerkki
- meidän asettelumme on :
src/
|___pages/
| |___Index/
| |___index.tsx
| |___type.tsx
|___App.tsx
package.json
tsconfig.json
- tiedostojen sisältö
// package.json
// nothing path-related, only external dependencies
...
// tsconfig.json
{
"compilerOptions": {
"baseUrl": "./src/",
...
// src/App.tsx
...
import Index from 'pages/Index' // => ISSUE : Dependencies should be explicit (typescript:S4328)
...
// src/pages/Index/index.tsx
...
import * as Type from './type' // => OK, NO ISSUES
...
import { StoreContext } from 'store' // => ISSUE : Dependencies should be explicit (typescript:S4328)
...
export default () => (
...
Vastaus #1
voit yrittää lisätä tietyn polun sonar.sources-kohtaan näin:
// in my tsconfig
"paths": {
"src": [
"./src/*"
],
},
// in my sonar-project.properties
sonar.sources=src/components,src/navigation,src/screens,src/store,src/types,src/utils
se toimii minulle, sonar-skannauksen raportissa 'riippuvuus pitäisi olla yksiselitteinen' -ongelmat on poistettu
