npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

ecode-code-check

v0.1.0

Published

Offline e9/e10 ecode and EB application compliance checker Skill.

Readme

ecode AI 代码合规检测工具

简介

ecode AI 代码合规检测工具是一套面向 泛微 e9/e10 ecode 二次开发平台与 e10 EB 应用迁出包的代码检查工具。

一次可以提供一个或多个 .zip、解压目录或 ecode.json。工具先自动识别 e9/e10 与 EB 包类型,再调用对应还原工具:CSS 按平台使用独立规则,JavaScript 与 resources 图片体积检测共用;e9 追加 e9 规范,e10 与 EB 追加 e10 规范、国际化与可选系统敏感词检测。

核心理念:你提供 ecode,AI 自动检查环境、执行检测、定位问题并输出报告。


能力矩阵

| 能力 | 检测范围 | 输出结果 | |---|---|---| | CSS 样式污染 | e9 系统样式/页面命名作用域;e10 组件、第三方、通用类和平台场景 | 按平台独立规则,输出三级风险、位置、次数、安全评分和修改建议 | | JavaScript 语法 | 扩展名精确为 .js 的文件,支持 ecode 中常用的 JSX 等语法 | 文件、行列位置和 Babel Parser 语法错误 | | JS 代码风险 | docs/02-js规范/02-JavaScript代码风险规范.md | 安全 / request 请求规模、外链与涉密字段 / React / 监听与 effect 清理 | | 图片资源体积 | e9/e10 还原结果中 resources 目录内的图片 | 严格超过 2 MiB 时输出文件、体积与压缩建议 | | 平台自动识别与还原 | e9 datas / e10 rootFolders / EB profile.json + *_<19位ID>.zip,支持多包 | 分别调用 unBuildE9.js / unbuild.js / unbuildEbApp.js | | EB 应用迁出包 | 页面、表单 source_code.ecode 与 attachment 关联 ecode | 页面/表单按 e10 检测;单条缺失 ecode 时告警并继续;关联 ZIP 同时还原为可浏览源码目录并复用标准 e10 报告 | | e9 规范 | 仅 e9 的在线模块语法、复写/生命周期请求、同步请求、loadjs 去重和 iframe | 三级风险、位置和次数 | | e10 规范 | 仅 e10 的 TEAMS、openapi、资源引用、二级路径等 | 三级风险、位置和次数 | | e10 国际化 | e10 与 EB 中 getLabel 的待补标签 ID | 命中位置、次数与可选一键回填 | | e10 系统敏感词 | 用户本次提供的系统后台导出 敏感词.xlsx | 敏感词、全部命中位置和出现次数 | | 免安装运行 | WorkBuddy Node.js、Skill 内置 @babel/parser | 不调用 npm、不联网安装依赖、不生成 node_modules | | 标准 Skill 入口 | Claude Code、Codex、Gemini、Cursor、Windsurf、Trae、CodeBuddy | SKILL.md 统一承载检测与输出契约,各工具文件仅作入口引导 |

输入与输出

| 类型 | 支持内容 | |---|---| | ecode 输入 | 一个或多个 e9/e10 .zip、已解出的目录、ecode.json 或 EB 应用迁出 .zip | | 敏感词输入 | 仅批次含 e10 时确认;需要时提供后台导出的 .xlsx,不需要则跳过 | | 请求域名白名单 | 每批次正式检测前确认一次;支持精确域名与 *.example.com,也可明确回复“无” | | 对话输出 | 除必需输入提问和失败信息外,正式检测从第一步起只调用工具,不输出思考旁白、过程消息、进度、结果或完成提示 | | 唯一交付 | 标准 e9/e10 生成 outputs/index.html,EB 生成 outputs/eb-index.html;成功后由 WorkBuddy present_files 直接打开 |


检测流程

用户提供一个或多个 ecode 包
              │
              ▼
┌────────────────────────┐
│ 识别 e9 / e10 / EB      │
│ 保持上传顺序             │
└────────────┬───────────┘
             │
      含 e10 │→ 确认一次敏感词策略
             │→ 确认一次请求域名白名单
             ▼
┌────────────────────────┐
│ 环境准备                │
│ WorkBuddy Node → 内置 parser │
└────────────┬───────────┘
             │
      环境异常│
             ├────→ 输出原因 + 解决方案 → 中断检测
             │
             ▼
┌────────────────────────┐
│ 调用平台还原工具         │
│ e9 / e10 / EB → 临时目录│
├────────────────────────┤
│ 完整执行平台适用检测项   │
│ 仅保留异常区块           │
│ 按实际显示顺序连续编号   │
│ 全通过输出统一结论       │
└────────────┬───────────┘
             │
             ▼
  e9/e10 → 生成 outputs/index.html 并用 present_files 打开
  EB     → 生成 outputs/eb-index.html 并用 present_files 打开

正式检测在系统临时目录还原源码,分析完成后自动清理;不会在工作区生成解包目录。ui/ 只保留随 Skill 分发的只读模板,最终报告只生成在当前工作区 outputs/。


核心 Skill

ecode-code-check

ecode-code-check 是本工具的核心 Skill,负责统一调度环境准备、检测脚本和对话输出。仓库根目录本身就是完整 Skill 包。

AI 会在用户提出以下需求时使用该 Skill:

  • 检查 ecode 代码规范或代码合规
  • 自动识别 e9/e10,批量检查多个代码包
  • 检测 e10 EB 应用迁出包中的页面、表单与关联全局 ecode
  • 检查 CSS 样式污染
  • 检查 JavaScript 语法
  • 检查 resources 图片文件体积
  • 检查 e10 系统敏感词
  • 维护检测规则、报告格式或修复误报漏报

一次执行始终完成对应平台的完整检测:CSS 规则按平台隔离;JS 检测 将语法、风险与适用的 e9/e10 平台规范按 1/2/3 级合并展示;e10 与 EB 另执行国际化和敏感词;三者都会检查适用的 resources 图片。EB attachment 下的标准 e10 ZIP 会逐包检测并写入同一份 HTML。正式检测 stdout 保持为空,标准包结果写入 outputs/index.html,EB 结果写入 outputs/eb-index.html 并用 present_files 打开。

若当前工作区没有本仓库规则,可安装为用户级 Skill:

node scripts/install-user-skill.js

默认安装到 ~/.agents/skills/ecode-code-check。


七项核心检测

CSS 样式污染

CSS 检测采用三级风险体系:

| 级别 | 含义 | 处理建议 | |---|---|---| | 🔴 1 级·危险 | 确定会造成全局污染或覆盖平台、组件样式 | 必须修改 | | 🟡 2 级·建议 | 命名不规范或存在较大冲突风险 | 建议修改 | | 🔵 3 级·潜在 | 通用类名、平台生成 ID 等潜在问题 | 结合场景确认 |

检测特点:

  • 检查普通 CSS 以及 @media、@supports 内的选择器。
  • CSS 内只处理样式规则;JS 中的平台特有项由独立的 e9/e10 检测域分析,报告行并入 JS 检测 的对应等级。
  • 同类问题自动去重并汇总全部位置和出现次数。
  • 每个级别最多展示 5 个不同问题,避免报告过长。
  • 根据三级问题数量计算满分为 100 分的 CSS 安全评分。

CSS 规则严格按平台隔离:

  • e9 只使用 docs/01-css规范/07-e9-css规范.md,检测裸写 .ant-*、.wf-*、命中官方组件基类清单的 .wea-*,以及官方明确的 .header / .footer 冲突示例;用户自定义 .wea-*(如 .wea-crm-plan-*)、模块父级、固定业务前缀和注入的独立类放行。
  • e10 使用 docs/01-css规范/ 中 01-06 的组件前缀、第三方插件、历史类、通用类/标签与平台专项规则;「主题类 appId 写死」非主题为 3 级,主题 ecode(appMode=4)升为 1 级。
  • e9 不沿用 ui- / ui-m-、第三方插件、e10 历史类、e10 通用类、weapp-demo、主题 appId 或 #ebpage_* 等 e10 清单。

JavaScript 语法

JS 检测使用 Skill 自带的 @babel/parser,并按 ecode 二开平台的代码特点进行配置:

  • 只检测扩展名精确为 .js 的文件。
  • .jsx、.ts、.tsx 不进入语法检测和统计。
  • .js 文件允许使用 JSX。
  • 支持装饰器、类属性、私有属性、动态导入属性、顶层 await 等常用语法。
  • 只报告解析器确认的语法错误,并提供文件、行号和列号。
  • 所有语法错误固定为 1 级·警告。

本阶段不执行 ESLint,也不分析代码风格、类型、业务逻辑、依赖可用性、浏览器兼容性或运行时行为。命中项以类型 JS 语法 进入 JS 检测 的 1 级表格。代码风险见下一节。

JS 语法规则由 docs/02-js规范/01-JavaScript语法规范.md 维护。

JS 代码风险

基于 Babel AST 检查二开 .js 中的常见风险(详见规范文档):

  • 安全:dangerouslySetInnerHTML、document.write、eval/new Function、字符串版定时器(XSS 与代码注入为 2 级)、target="_blank" 缺 noopener、疑似硬编码密钥;innerHTML/outerHTML 赋值不检测。
  • request 请求:对象参数或 GET URL 查询参数的静态数值 >=1000(2 级);非白名单绝对外链和 username/password/token 等未加密字段(3 级)。
  • React:缺 key、key={index}、条件/嵌套 Hook、渲染期 setState、组件内定义子组件。
  • 资源清理:所有 .js 中 addEventListener 未见匹配卸载,以及 useEffect 内定时器/订阅未见 cleanup。

风险结构化结果保持独立;报告中与语法、适用平台规范合并,直接按 1 级·警告 / 2 级·建议 / 3 级·潜在 三级表格展示,不显示来源分类标题。

规则详见 docs/02-js规范/02-JavaScript代码风险规范.md。

e9 专项检测域

仅 e9 执行,规则来源为 docs/02-js规范/04-e9-ecode规范.md:

  • 在线源码使用标准 import/export(1 级·警告)
  • 组件复写钩子或重复渲染生命周期内直接请求接口(1 级·警告)
  • 同步 XHR / ajax async:false、loadjs 未去重(2 级·建议)
  • JSX 原生 iframe(3 级·潜在)

检测器会排除事件回调中延迟执行的请求,以及 componentDidMount 的一次性请求。命中项并入 JS 检测 的对应等级。

e10 专项检测域

E10/ecode 平台特有项在结构化结果中与通用 JS 风险分离,报告行统一并入 JS 检测,当前包括:

  • TEAMS / window.TEAMS 手动赋值、前端直调 openapi / openserver、替换组件再 import 原组件(1 级·警告)
  • 前置 entry/init 引用 @weapp/ui、weId 全路径 ===、异步组件未包 Suspense、路由未使用 regReactChildren、普通 request 替代 devRequest、loadjs 站外地址(2 级·建议)
  • weId / weid 与字符串相等前未判空、原生 img/a/iframe 未 getSecondPathUrl(3 级·潜在)
  • JS 内主题类数字 appId 写死(非主题 🔵 3 级;主题 appMode=4 🔴 1 级禁止写死)、以及 #ebpage_* 写死(潜在)

CSS 样式限定仍只看 CSS 样式污染区块,并按平台分别读取 07-e9-css规范.md 或 e10 的 01-06。

e10 专项:e10 国际化

e10 与 EB 检测 getLabel(0/-1/1/空, 文案) 待补标签 ID,仅命中时显示;标准 e10 ecode 支持一键回填。完整规则见 docs/06-e10国际化检测规范/01-e10国际化检测规范.md。

e10 专项:e10 系统敏感词

敏感词完全以用户本次提供的系统后台导出文件为准:

  • 只读取列名为“敏感词”的非空单元格。
  • 不使用任何内置、默认或兜底词库。
  • 按大小写不敏感的字面量子串匹配,不把词项当作正则表达式。
  • 扫描所有带 content 的文本代码文件,字符串和注释同样参与检测。
  • 同一敏感词在同一文件内自动汇总,并保留全部 文件:行:列。

批次包含 e10 时,Agent 会先确认是否需要敏感词检测:选择不需要时使用 --skip-sensitive;需要时再收集 敏感词.xlsx。e9 不执行本阶段。只有命中时才显示敏感词区块;跳过、无有效词项或无命中均不占报告序号。

导出方式和文件要求见 docs/03-e10系统敏感词/01-敏感词检测说明.md。

通用可选区块 · 资源检测

e9/e10 都会在还原后递归扫描路径段名称为 resources 的目录,只检查常见图片扩展名。e10 ZIP/解压目录里独立存放在 ${resources 或 resources 下、未写入 codes[].content 的图片也会按原始二进制字节还原并检测。图片严格超过 2 MiB 时,报告末尾以当时下一个连续序号显示 ### N. 资源检测:

  • 问题:文件体积过大影响加载性能
  • 建议:通过 https://tinypng.com 等工具压缩后再上传

${resources/${name 会规范化为 resources/name;不安全 ZIP 路径不会写入临时还原目录。恰好 2 MiB 的图片不告警;非图片、目录外图片不检测。没有超限图片时不显示标题、通过结论或空表格。完整规则见 docs/04-资源检测规范/01-图片资源体积规范.md。


运行环境检查

检测开始前,prepare-environment.js 会检查:

  1. WorkBuddy 提供的 Node.js 是否存在且版本不低于 16.0.0。
  2. Skill 自带的 tool/vendor/babel-parser.js 是否可以正常加载。

客户运行期不需要 npm、网络连接或可写的依赖目录,也不会执行 npm install。解析器缺失表示 Skill 包不完整,应重新获取完整 Skill,而不是在客户环境补装依赖。

环境检查失败时会中断检测,并按实际原因提示:

  • WorkBuddy Node.js 运行时版本过低
  • tool/vendor/babel-parser.js 缺失
  • 内置 parser 损坏或无法加载

升级 WorkBuddy 或重新获取完整 Skill 后,再次发起检测即可。


快速开始

使用自然语言

  1. 使用已适配的 AI 编码工具打开本项目目录。
  2. 提供 ecode 的 .zip 或 ecode.json 文件路径。
  3. 提供当前环境的请求域名白名单;无白名单时明确说明“无”。
  4. 如需敏感词检测,同时提供系统后台导出的 敏感词.xlsx。
  5. 用自然语言要求 AI 执行代码合规检测。

提示词与对话示例

检测完成后,AI 不在对话中展开结果,也不读写 memory;标准 e9/e10 只交付 outputs/index.html,EB 只交付 outputs/eb-index.html,并用 present_files 打开。

对话 1:同时提供 ecode 压缩包和敏感词文件

用户:

帮我检查这个 ecode 包的代码合规:
/path/to/项目.zip

敏感词文件:
/path/to/敏感词.xlsx

请求域名白名单:
api.example.com,*.trusted.example.com

AI: (无对话回复;WorkBuddy 通过 present_files 直接打开 outputs/index.html。)

对话 2:只提供 ecode.json

用户:

请检查 /path/to/ecode.json 的代码规范和代码合规问题。

AI:

是否需要检测 e10 系统敏感词?请回复「需要」或「不需要」。
请输入当前环境的请求域名白名单(多个域名用逗号分隔,支持 *.example.com);如无白名单请回复「无」。

对话 3:首次未提供 ecode 文件

用户:

帮我检查一下 ecode 项目的 CSS 污染和 JS 语法。

AI:

请提供 ecode 的 .zip 打包文件(或已解出的 ecode.json)路径。

用户:

文件在 /path/to/项目.zip

AI:

是否需要检测 e10 系统敏感词?请回复「需要」或「不需要」。

报告结构

每次成功检测都按平台执行完整检测。HTML 报告只显示异常区块,顺序为 CSS → JS(含平台规范)→ e10 国际化 → e10 敏感词 → 资源。EB 使用 outputs/eb-index.html 分组展示;无法还原的单条 source_code 会生成 EB 源码还原 finding,不会误报全部通过。报告由检测脚本统一生成,AI 不会在对话中重复报告内容。


技术架构

技术栈

  • 运行环境:WorkBuddy 提供的 Node.js >=16.0.0
  • JavaScript 解析器:Skill 内置 @babel/parser,客户无需安装
  • ZIP / XLSX 读取:Node.js 原生能力,检测过程不依赖系统解压工具
  • 规则来源:Markdown 规范文档 + 检测脚本
  • 输出协议:正式检测 stdout 为空;标准 e9/e10 只生成 outputs/index.html,EB 只生成 outputs/eb-index.html,均用 present_files 打开;全程不读写 memory

项目目录

ecode-css-verify/
├── SKILL.md                              # Skill 唯一标准执行入口
├── agents/openai.yaml                    # Skill 展示与默认提示
├── references/
│   └── maintenance.md                    # local 文件职责与回归要求
├── scripts/
│   ├── prepare-environment.js             # WorkBuddy Node 与内置 parser 检查
│   ├── ecode-code-checker.js              # 核心检测器
│   ├── install-user-skill.js              # 用户级独立安装
│   └── runtime-layout.js                  # Skill 目录布局定位(被检测器引用)
├── tests/                                 # 仓库维护测试,不进入用户级安装
│   ├── run-environment-fixtures.js        # 环境准备回归
│   └── run-standalone-fixtures.js         # 独立安装回归
├── docs/
│   ├── 01-css规范/                       # e9 独立 CSS 规范与 e10 CSS 清单
│   ├── 02-js规范/                        # JS 语法、风险与平台专项规范
│   ├── 03-e10系统敏感词/                 # 敏感词导出与检测说明
│   ├── 04-资源检测规范/                  # e9/e10 图片资源体积规范
│   ├── 05-eb应用包检测/                  # EB 迁出包结构与输出规范
│   └── 06-e10国际化检测规范/             # e10 国际化检测与回填规范
├── tool/
│   ├── vendor/babel-parser.js            # 客户运行期自带的 JS 解析器
│   ├── vendor/BABEL-PARSER-LICENSE.txt   # 第三方许可证
│   ├── unbuild.js                        # e10 源码还原脚本
│   ├── unBuildE9.js                      # e9 ZIP/目录源码还原脚本
│   └── unbuildEbApp.js                   # EB 多层迁出包源码还原脚本
├── CODEBUDDY.md                           # WorkBuddy 项目入口,强制路由到 SKILL.md
├── AGENTS.md                              # 指向标准 SKILL.md 的兼容入口
├── CLAUDE.md / GEMINI.md                  # Claude / Gemini 兼容入口
└── .codebuddy/                            # CodeBuddy 兼容入口

唯一标准执行入口是根目录 SKILL.md。其他 AI 工具文件仅负责引导完整读取该 Skill,不再重复维护执行契约。


能力边界与扩展方向

当前工具支持 e9/e10/EB 自动分流与以下合规检测:

  • CSS 样式污染
  • JavaScript 语法
  • JS 代码风险
  • e9 规范(仅 e9)
  • e10 规范(仅 e10)
  • e10 国际化(e10 与 EB)
  • e10 系统敏感词
  • EB 页面、表单及关联全局 ecode
  • resources 图片体积

后续可以通过扩展 Skill、检测脚本和规范文档,增加更多业务模块及个性化检测能力,例如:

| 可扩展 Skill | 方向 | |---|---| | ecode-component-check | 公共组件使用、组件替换与参数复写规范 | | ecode-security-check | 高风险 API、凭据泄露和安全编码规则 |

这些名称代表扩展方向,当前版本尚未内置。通过模块化扩展,可以逐步形成覆盖更多业务场景的 ecode 代码质量与合规检测体系。


注意事项

  1. ecode 输入必须是正常格式的 .zip、解压目录或 ecode.json;EB 输入必须是完整迁出 ZIP。
  2. 敏感词表必须来自系统后台,并包含列名为“敏感词”的列。
  3. 敏感词匹配包含字符串和注释,命中并不等同于业务违规,需结合实际语境确认。
  4. JS 检测包含语法解析与 AST 静态风险检查,但不会执行代码,也不代表运行结果一定正确。
  5. request 规则只判断源码中可静态确认的参数、URL 与加密表达式;动态变量和运行时拼接需人工复核。
  6. 域名白名单只比较 hostname,不比较协议、端口、路径或查询参数;*.example.com 只匹配子域,不匹配根域。
  7. CSS 安全评分用于快速评估污染风险,最终修改仍需结合页面作用域和业务场景判断。