使用Sonarqube扫描Javascript代码的示例


Posted in Javascript onDecember 26, 2018

使用sonarqube对javascript代码进行扫描,分析代码质量,最简单的方式莫过于使用缺省的sonar-way中的javascript的规则,使用sonar-scanner进行扫描,这篇文章通过最简单的例子,来进行说明。

事前准备

Sonarqube

Sonarqube可以使用docker版本快速搭建,可以参看一下Easypack整理的镜像,具体使用可以参看如下链接,这里不再赘述:

https://hub.docker.com/r/liumiaocn/sonarqube/

环境假定

本文使用到的sonarqube为本机32003可以访问到的服务。版本为5.6.5

sonar-scanner

sonar-scanner详细信息如下:

liumiaocn:sonar liumiao$ sonar-scanner -v
INFO: Scanner configuration file: /Users/liumiao/Desktop/sonar/sonar-scanner-3.2.0.1227-macosx/conf/sonar-scanner.properties
INFO: Project root configuration file: /Users/liumiao/sonar/sonar-project.properties
INFO: SonarQube Scanner 3.2.0.1227
INFO: Java 1.8.0_121 Oracle Corporation (64-bit)
INFO: Mac OS X 10.14 x86_64
liumiaocn:sonar liumiao$

项目目录构成

项目文件与目录构成信息如下:

liumiaocn:sonar liumiao$ tree
.
├── sonar-project.properties
└── src
  └── Person.js
1 directory, 2 files
liumiaocn:sonar liumiao$

JavaScript源码

使用如下Person.js的JavaScript源码,详细信息如下

liumiaocn:sonar liumiao$ cat src/Person.js 
var Person = function(first, last, middle) {
  this.first = first;
  this.middle = middle;
  this.last = last;
};
Person.prototype = {
  whoAreYou : function() {
    return this.first + (this.middle ? ' ' + this.middle: '') + ' ' + this.last;
  }
};
var a = NaN;
if (a === NaN) { // Noncompliant; always false
 console.log("a is not a number"); // this is dead code
}
if (a !== NaN) { // Noncompliant; always true
 console.log("a is not NaN"); // this statement is not necessarily true
}
for (var i = 0; i < strings.length; i--) {
 console.log("dead code")
}
if (str == null && str.length == 0) {
 console.log("String is empty");
}
liumiaocn:sonar liumiao$

sonar-project.properties设定文件

项目设定文件信息详细如下:

liumiaocn:sonar liumiao$ cat sonar-project.properties 
sonar.projectKey=javascript-prj
sonar.projectName=JavaScript Demo Project
sonar.projectVersion=1.0
sonar.sources=src
sonar.host.url=http://127.0.0.1:32003
sonar.login=admin
sonar.password=admin
liumiaocn:sonar liumiao$

执行sonar-scanner

liumiaocn:sonar liumiao$ pwd
/Users/liumiao/sonar
liumiaocn:sonar liumiao$ ls
sonar-project.properties src
liumiaocn:sonar liumiao$ sonar-scanner
INFO: Scanner configuration file: /Users/liumiao/Desktop/sonar/sonar-scanner-3.2.0.1227-macosx/conf/sonar-scanner.properties
INFO: Project root configuration file: /Users/liumiao/sonar/sonar-project.properties
INFO: SonarQube Scanner 3.2.0.1227
INFO: Java 1.8.0_121 Oracle Corporation (64-bit)
INFO: Mac OS X 10.14 x86_64
INFO: User cache: /Users/liumiao/.sonar/cache
INFO: SonarQube server 5.6.5
INFO: Default locale: "en_US", source code encoding: "UTF-8" (analysis is platform dependent)
INFO: Load global repositories
INFO: Load global repositories (done) | time=129ms
INFO: User cache: /Users/liumiao/.sonar/cache
INFO: Load plugins index
INFO: Load plugins index (done) | time=3ms
INFO: Process project properties
INFO: Load project repositories
INFO: Load project repositories (done) | time=126ms
INFO: Load quality profiles
INFO: Load quality profiles (done) | time=41ms
INFO: Load active rules
INFO: Load active rules (done) | time=609ms
WARN: SCM provider autodetection failed. No SCM provider claims to support this project. Please use sonar.scm.provider to define SCM of your project.
INFO: Publish mode
INFO: ------------- Scan JavaScript Demo Project
INFO: Load server rules
INFO: Load server rules (done) | time=73ms
INFO: Base dir: /Users/liumiao/sonar
INFO: Working dir: /Users/liumiao/sonar/.scannerwork
INFO: Source paths: src
INFO: Source encoding: UTF-8, default locale: en_US
INFO: Index files
INFO: 1 files indexed
INFO: Quality profile for js: Sonar way
INFO: JaCoCoSensor: JaCoCo report not found : /Users/liumiao/sonar/target/jacoco.exec
INFO: JaCoCoItSensor: JaCoCo IT report not found: /Users/liumiao/sonar/target/jacoco-it.exec
INFO: Sensor Lines Sensor
INFO: Sensor Lines Sensor (done) | time=11ms
INFO: Sensor JavaScriptSquidSensor
INFO: 1 source files to be analyzed
INFO: Sensor JavaScriptSquidSensor (done) | time=200ms
INFO: 1/1 source files have been analyzed
INFO: Sensor SCM Sensor
INFO: No SCM system was detected. You can use the 'sonar.scm.provider' property to explicitly specify it.
INFO: Sensor SCM Sensor (done) | time=0ms
INFO: Sensor org.sonar.plugins.javascript.lcov.UTCoverageSensor
INFO: Sensor org.sonar.plugins.javascript.lcov.UTCoverageSensor (done) | time=0ms
INFO: Sensor org.sonar.plugins.javascript.lcov.ITCoverageSensor
INFO: Sensor org.sonar.plugins.javascript.lcov.ITCoverageSensor (done) | time=0ms
INFO: Sensor Zero Coverage Sensor
INFO: Sensor Zero Coverage Sensor (done) | time=7ms
INFO: Sensor Code Colorizer Sensor
INFO: Sensor Code Colorizer Sensor (done) | time=0ms
INFO: Sensor CPD Block Indexer
INFO: DefaultCpdBlockIndexer is used for js
INFO: Sensor CPD Block Indexer (done) | time=20ms
INFO: Calculating CPD for 1 files
INFO: CPD calculation finished
INFO: Analysis report generated in 53ms, dir size=13 KB
INFO: Analysis reports compressed in 17ms, zip size=6 KB
INFO: Analysis report uploaded in 29ms
INFO: ANALYSIS SUCCESSFUL, you can browse http://127.0.0.1:32003/dashboard/index/javascript-prj
INFO: Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report
INFO: More about the report processing at http://127.0.0.1:32003/api/ce/task?id=AWcNw2JuTV5bsL-6UV7v
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 3.719s
INFO: Final Memory: 19M/278M
INFO: ------------------------------------------------------------------------
liumiaocn:sonar liumiao$

确认结果

代码扫描整体结果

使用Sonarqube扫描Javascript代码的示例

详细代码级别的扫描结果展示

使用Sonarqube扫描Javascript代码的示例

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Javascript 相关文章推荐
javascript学习笔记(十五) js间歇调用和超时调用
Jun 20 Javascript
js实现一个省市区三级联动选择框代码分享
Mar 06 Javascript
jQuery 全选/反选以及单击行改变背景色实例
Jul 02 Javascript
jQuery focus和blur事件的应用详解
Jan 26 Javascript
javascript解析json数据的3种方式
May 08 Javascript
jQuery的ready方法详解
Nov 27 Javascript
jquery.gridrotator实现响应式图片展示画廊效果
Jun 23 Javascript
Bootstrap每天必学之警告框插件
Apr 26 Javascript
Javascript 详解封装from表单数据为json串进行ajax提交
Mar 29 Javascript
整理关于Bootstrap排版的慕课笔记
Mar 29 Javascript
js实现网页的两个input标签内的数值加减(示例代码)
Aug 15 Javascript
JQuery元素快速查找与操作
Apr 22 jQuery
angular6的table组件开发的实现示例
Dec 26 #Javascript
详解VUE里子组件如何获取父组件动态变化的值
Dec 26 #Javascript
JavaScript基础之静态方法和实例方法分析
Dec 26 #Javascript
微信小程序实现文字跑马灯
May 26 #Javascript
基于JavaScript canvas绘制贝塞尔曲线
Dec 25 #Javascript
基于js Canvas实现二次贝塞尔曲线
Dec 25 #Javascript
JavaScript实现小球沿正弦曲线运动
Sep 07 #Javascript
You might like
PHP下获取上个月、下个月、本月的日期(strtotime,date)
2014/02/02 PHP
php提示Failed to write session data错误的解决方法
2014/12/17 PHP
phpmailer绑定邮箱的实现方法
2016/12/01 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
2017/02/07 PHP
IE 缓存策略的BUG的解决方法
2007/07/21 Javascript
Jquery 获得服务器控件值的方法小结
2010/05/11 Javascript
jQuery函数的等价原生函数代码示例
2013/05/27 Javascript
纯JavaScript实现获取onclick、onchange等事件的值
2014/12/29 Javascript
深入分析Cookie的安全性问题
2015/03/01 Javascript
jquery实现select下拉框美化特效代码分享
2015/08/18 Javascript
Javascript基于AJAX回调函数传递参数实例分析
2015/12/15 Javascript
AngularJs  Creating Services详解及示例代码
2016/09/02 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
在angular 6中使用 less 的实例代码
2018/05/13 Javascript
详解vue-router传参的两种方式
2018/09/10 Javascript
vue实现可视化可拖放的自定义表单的示例代码
2019/03/20 Javascript
vue项目,代码提交至码云,iconfont的用法说明
2020/07/30 Javascript
[01:25]DOTA2超级联赛专访iG 将调整状态找回自己
2013/06/05 DOTA
[02:45]DOTA2英雄基础教程 伐木机
2013/12/23 DOTA
python 图片验证码代码
2008/12/07 Python
python发送邮件接收邮件示例分享
2014/01/21 Python
Python3 正在毁灭 Python的原因分析
2014/11/28 Python
Python Json序列化与反序列化的示例
2018/01/31 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
2020/01/25 Python
Python通过4种方式实现进程数据通信
2020/03/12 Python
Python使用lambda抛出异常实现方法解析
2020/08/20 Python
比利时的在线灯具店:Lampen24.be
2019/07/01 全球购物
给民警的表扬信
2014/01/08 职场文书
致短跑运动员广播稿
2014/01/09 职场文书
物业招聘计划书
2014/01/10 职场文书
师说教学反思
2014/02/07 职场文书
信用社主任竞聘演讲稿
2014/05/23 职场文书
城南旧事观后感
2015/06/11 职场文书
伊索寓言读书笔记
2015/06/30 职场文书
幼儿教师远程研修感悟
2015/11/18 职场文书
培训心得体会怎么写
2016/01/25 职场文书