SonarQube:无法找到Typescript模块

5

我正在使用 SonarQube 分析一个 Typescript 项目。

分析在 Gitlab 流水线阶段中运行,使用带有 sonar-scanner 的 docker 镜像。

这里是一些输出:

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

考虑到它会下载相关插件:

INFO: 下载 sonar-typescript-plugin-1.2.0.1484.jar

为什么之后却找不到它呢?

ERROR: 错误:找不到模块“typescript”

3个回答

6
在非Docker环境下,您需要首先设置NODE_PATH指向全局NPM目录。在Windows 10命令行中,批处理脚本如下所示:
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

1
在我的情况下,我正在运行一个 AppVeyor CI 构建,并且收到了“无法找到'typescript'模块”的错误。对我来说,解决方案是将 - cmd: SET NODE_PATH=%AppData%\npm\node_modules- cmd: npm install -g typescript 添加到 appveyor.yml 文件的 install 部分中。完整的 appveyor.yml 文件可以在这里找到。 - Greg Trevellick

0

它是否正确找到了Node?我们发现Node必须在路径上,否则任何带有TypeScript代码的模块都将导致SQ分析失败。实际上,堆栈跟踪中的错误(接近底部)建议您检查Node配置。

ERROR: Failed to find 'typescript' module. Please check, NODE_PATH contains 
location of global 'typescript' or install locally in your project

嗨,请在此处查看详细分析:https://github.com/SonarSource/SonarTS/issues/453 - pkaramol
您可以通过命令 node --version 来检查是否已安装 Node。对我而言,在我的 appVeyor.yml 文件中进行检查非常有用(在 install: 部分中使用 - cmd: node --version)。 - Greg Trevellick

0

用于分析TypeScript文件的插件,需要在您的项目中全局或本地存在typescript节点模块。

假设您已经在计算机上安装了node.js,则有两个选择:

  • (推荐) 在开始分析您的项目之前运行npm install
  • 通过运行npm install -g typescript全局安装TypeScript

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接