PDI解析Sonar代码语言分布数据时JS编译报错求助
问题解决:PDI Modified JavaScript组件语法报错
问题原因
PDI的Modified JavaScript Value组件基于Rhino JavaScript引擎,对ES6语法(比如箭头函数=>、Map对象的属性访问方式)支持不完善,这是导致编译报错的核心原因。你的代码在现代浏览器(原生支持ES6)中能正常运行,但Rhino不兼容这些特性。
修正后的代码
改成Rhino兼容的ES5写法即可:
// 用普通JS对象替代Map,兼容Rhino引擎 var langMap = {}; // 增加空值判断,避免字符串为空时触发报错 if (sonar_ncloc_language_distribution) { // 用传统function替代箭头函数 sonar_ncloc_language_distribution.split(";").forEach(function(x) { var parts = x.split("="); // 确保分割后有有效的键值对 if (parts.length === 2) { langMap[parts[0]] = parts[1]; } }); } // 赋值变量,同时处理语言不存在的情况(避免undefined) var sonar_ncloc_java = langMap.java || 0; var sonar_ncloc_js = langMap.js || 0; var sonar_ncloc_jsp = langMap.jsp || 0; var sonar_ncloc_web = langMap.web || 0; var sonar_ncloc_xml = langMap.xml || 0;
关键修改点
- 替换
Map为普通JS对象:Rhino中Map的属性直接访问(如map.java)不生效,普通对象的键值访问更可靠 - 替换箭头函数为传统
function写法:Rhino对箭头函数的支持有限,传统函数写法兼容性更好 - 增加空值与格式校验:避免输入字符串为空或格式异常时触发报错,同时给变量设置默认值,防止后续流程出现
undefined问题
内容的提问来源于stack exchange,提问作者Cesare
相关产品推荐
相关产品推荐

