5

I am using SonarQube to analyze a Typescript project.

Analysis runs in a Gitlab pipeline stage, using a docker image with sonar-scanner.

Here is some output:

INFO: Download sonar-flex-plugin-2.3.jar
INFO: Download sonar-gitlab-plugin-2.1.0.jar
INFO: Download sonar-auth-gitlab-plugin-1.2.2.jar
INFO: Download sonar-csharp-plugin-6.6.0.3969.jar
INFO: Download sonar-javascript-plugin-3.3.0.5702.jar
INFO: Download sonar-java-plugin-4.15.0.12310.jar
INFO: Download sonar-php-plugin-2.12.0.2871.jar
INFO: Download sonar-python-plugin-1.8.0.1496.jar
INFO: Download sonar-scm-git-plugin-1.3.0.869.jar
INFO: Download sonar-scm-svn-plugin-1.6.0.860.jar
INFO: Download sonar-typescript-plugin-1.2.0.1484.jar
INFO: Download sonar-xml-plugin-1.4.3.1027.jar
INFO: SonarQube server 6.7.0
INFO: Default locale: "en", source code encoding: "UTF-8" (analysis is platform dependent)
INFO: Process project properties
INFO: Load project repositories
WARN: Project doesn't exist on the server. All issues will be marked as 'new'.
INFO: Load project repositories (done) | time=10ms
INFO: GlobalWorkingDir null
INFO: Scanning only changed files
INFO: Execute project builders
INFO: Execute project builders (done) | time=498ms
INFO: Load quality profiles
INFO: Load quality profiles (done) | time=26ms
INFO: Load active rules
INFO: Load active rules (done) | time=310ms
INFO: Load metrics repository
INFO: Load metrics repository (done) | time=16ms
INFO: Project key: ELS_UI
INFO: -------------  Scan ELS_UI
INFO: Load server rules
INFO: Load server rules (done) | time=37ms
INFO: Base dir: /builds/pkaramol/projectname
INFO: Working dir: /builds/pkara/projectname/.scannerwork
INFO: Source paths: app/components
INFO: Source encoding: UTF-8, default locale: en
WARN: Property 'sonar.php.file.suffixes' is not declared as multi-values/property set but was read using 'getStringArray' method. The SonarQube plugin declaring this property should be updated.
INFO: Index files
INFO: 268 files indexed
INFO: Quality profile for ts: Sonar way
INFO: Sensor SonarJavaXmlFileSensor [java]
INFO: Sensor SonarJavaXmlFileSensor [java] (done) | time=2ms
INFO: Sensor Analyzer for "php.ini" files [php]
INFO: Sensor Analyzer for "php.ini" files [php] (done) | time=4ms
INFO: Sensor TypeScript Sensor [typescript]
ERROR: module.js:471
ERROR:     throw err;
ERROR:     ^
ERROR: 
ERROR: Error: Cannot find module 'typescript'
ERROR:     at Function.Module._resolveFilename (module.js:469:15)
ERROR:     at Function.Module._load (module.js:417:25)
ERROR:     at Module.require (module.js:497:17)
ERROR:     at require (internal/module.js:20:19)
ERROR:     at Object.<anonymous> (/builds/pkara/projectname/.scannerwork/sonarts-bundle/node_modules/tslint/lib/linter.js:20:10)
ERROR:     at Module._compile (module.js:570:32)
ERROR:     at Object.Module._extensions..js (module.js:579:10)
ERROR:     at Module.load (module.js:487:32)
ERROR:     at tryModuleLoad (module.js:446:12)
ERROR:     at Function.Module._load (module.js:438:3)
ERROR: Failed to find 'typescript' module. Please check, NODE_PATH contains location of global 'typescript' or install locally in your project
ERROR: External process `node /builds/pkara/projectname/.scannerwork/sonarts-bundle/node_modules/tslint-sonarts/bin/tsrunner` returned an empty output. Run with -X for more information

Given that it downloads the relevant plugin:

INFO: Download sonar-typescript-plugin-1.2.0.1484.jar

Why does it fail to find it afterwards?

ERROR: Error: Cannot find module 'typescript

veben
  • 19,637
  • 14
  • 60
  • 80
pkaramol
  • 16,451
  • 43
  • 149
  • 324

3 Answers3

6

On non-docker environment, you have to set NODE_PATH first to point to the global NPM directory. In Windows 10 command line, the batch script looks like the following:

SET NODE_PATH=%AppData%\npm\node_modules
C:\SonarQube\sonar-scanner-3.1.0.1141-windows\bin\sonar-scanner.bat -Dsonar.projectKey=PortalUI -Dsonar.sources=.\src -Dsonar.host.url=http://localhost:9000 -Dsonar.login=longtoken_xkxxxxxxx
Jeson Martajaya
  • 6,996
  • 7
  • 54
  • 56
  • 1
    In my case I was running an AppVeyor CI build and getting the `Failed to find 'typescript' module` error. For me the solution was to add `- cmd: SET NODE_PATH=%AppData%\npm\node_modules` and `- cmd: npm install -g typescript` to the `install` section of my `appveyor.yml` file. The full appveyor.yml file can be found [here](https://github.com/GregTrevellick/ReadMeSynchronizer). – Greg Trevellick Aug 22 '18 at 20:47
0

Did it find Node correctly? We've discovered that Node must be on the path or SQ analysis fails on any module with Typescript code. Indeed, the error in the stacktrace (near the bottom) suggests you check the Node configuration.

ERROR: Failed to find 'typescript' module. Please check, NODE_PATH contains 
location of global 'typescript' or install locally in your project
user944849
  • 14,524
  • 2
  • 61
  • 83
  • Hi, pls check extensive analysis here: https://github.com/SonarSource/SonarTS/issues/453 – pkaramol Jan 18 '18 at 22:11
  • You can check if Node is installed by the command `node --version`. For me this was useful check in my appVeyor.yml file (`- cmd: node --version ` in the `install:` section). – Greg Trevellick Aug 22 '18 at 20:05
0

The plugin used to analyze TypeScript files, needs to have typescript node module available either globally or locally on your project.

Given you already have node.js installed on your machine, you have two options:

  • (Recommended) Running npm install before starting an analysis on your project
  • Installing TypeScript globally by running: npm install -g typescript

See: https://community.sonarsource.com/t/error-cannot-find-module-typescript/4396

veben
  • 19,637
  • 14
  • 60
  • 80