mcpField
E
es5-compliance

es5-compliance

github.com/serac-labs开发7760 次安装9 周前更新
代码仓库

关于 es5-compliance

面向 ServiceNow 服务端脚本开发者的 ES5 合规技能,说明 Rhino 支持的语法范围,并提供现代 JavaScript 写法的 ES5 替代方案。

主要功能

  1. 01列出不兼容的 ES6+ 语法
  2. 02提供 ES5 替代写法
  3. 03说明部署前的语法检查项
  4. 04区分服务端与客户端脚本要求

适用场景

  1. 01编写 ServiceNow 服务端脚本
  2. 02部署前检查脚本语法
  3. 03将现代 JavaScript 改写为 ES5

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/serac-labs/serac --skill es5-compliance

安装后在 Claude Code 中输入/es5-compliance确认已加载。

详细介绍

ServiceNow 的 ES5 合规性

ServiceNow 运行在 Mozilla Rhino 引擎上,该引擎仅支持 ES5 JavaScript(2009 年标准)。所有服务器端脚本都必须使用 ES5 语法。

禁止使用的语法(会导致 SyntaxError)

ES6+ 语法ES5 替代写法
const x = 5var x = 5
let items = []var items = []
() => {}function() {}
`Hello ${name}`'Hello ' + name
for (x of arr)for (var i = 0; i < arr.length; i++)
{a, b} = objvar a = obj.a; var b = obj.b;
[a, b] = arrvar a = arr[0]; var b = arr[1];
...spread使用 Array.prototype.slice.call()
class MyClass {}使用构造函数
async/await使用 GlideRecord 回调
Promise使用带回调的 GlideRecord

常见模式

变量声明
// WRONG - ES6
const MAX_RETRIES = 3
let currentUser = gs.getUser()

// CORRECT - ES5
var MAX_RETRIES = 3
var currentUser = gs.getUser()
函数
// WRONG - Arrow functions
var active = incidents.filter((inc) => inc.active)
var process = () => {
  return "done"
}

// CORRECT - ES5 functions
var active = []
for (var i = 0; i < incidents.length; i++) {
  if (incidents[i].active) {
    active.push(incidents[i])
  }
}
var process = function () {
  return "done"
}
字符串拼接
// WRONG - Template literals
var message = `Incident ${number} assigned to ${user}`

// CORRECT - String concatenation
var message = "Incident " + number + " assigned to " + user
循环
// WRONG - for...of
for (var item of items) {
  gs.info(item)
}

// CORRECT - Traditional for loop
for (var i = 0; i < items.length; i++) {
  gs.info(items[i])
}
默认参数
// WRONG - Default parameters
function process(incident, priority = 3) {
  // ...
}

// CORRECT - Manual defaults
function process(incident, priority) {
  if (typeof priority === "undefined") {
    priority = 3
  }
  // ...
}

自动验证

部署任何服务器端脚本之前:

  1. 检查 const/let 声明,并将其改为 var
  2. 检查箭头函数 =>,并将其改为 function()
  3. 检查模板字符串 `,并将其改为字符串拼接
  4. 检查解构赋值 {a, b},并将其改为显式属性访问
  5. 检查 for...of 循环,并将其改为基于索引的循环

例外:客户端脚本

客户端脚本(Client Scripts、UI Policies)在浏览器中运行,根据用户使用的浏览器,可能支持 ES6+。不过,为了获得最大兼容性,仍建议使用 ES5。

评论

支持 Markdown