You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 14:50:30