plugins/languages/javascript/skills/core/SKILL.md
JavaScript/TypeScript 核心开发规范:ES2025-2026语法标准、ESM模块系统、const/let变量声明、命名约定、Vite 6构建工具、ESLint 9 flat config代码检查。编写JS/TS代码、创建项目、配置构建工具链时加载。
npx skillsauth add lazygophers/ccplugin plugins/languages/javascript/skills/coreInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
| Agent | 说明 | | ----- | ---- | | dev | JavaScript 开发专家 | | debug | JavaScript 调试专家 | | test | JavaScript 测试专家 | | perf | JavaScript 性能优化专家 |
| 场景 | Skill | 说明 | |------|-------|------| | 异步编程 | Skills(javascript:async) | async/await、Promise、AbortController | | React 开发 | Skills(javascript:react) | React 19、Server Components、Next.js 15 | | Vue 开发 | Skills(javascript:vue) | Vue 3.5、Composition API、Nuxt 4 | | Web 安全 | Skills(javascript:security) | XSS 防护、CSP、Zod 验证 |
JavaScript 生态追求高性能、组件化、ESM 原生、运行时验证。
import/export,"type": "module"varrequire / module.exports)console.log(使用结构化日志)innerHTML 直接设置用户输入(XSS 漏洞).toSorted(), .toReversed())// Object.groupBy / Map.groupBy
const grouped = Object.groupBy(users, u => u.role);
// 非变异数组方法
const sorted = arr.toSorted((a, b) => a - b);
const reversed = arr.toReversed();
const updated = arr.with(0, 'new');
// Promise.withResolvers
const { promise, resolve, reject } = Promise.withResolvers();
// Array.fromAsync
const items = await Array.fromAsync(asyncIterable);
// Set 方法
const union = setA.union(setB);
const intersection = setA.intersection(setB);
const difference = setA.difference(setB);
// ES2026: 显式资源管理(using / await using)
{
using file = openFile("data.txt"); // 块结束时自动 dispose
// file[Symbol.dispose]() 自动调用
}
{
await using db = await connectDB(); // 异步资源自动清理
// db[Symbol.asyncDispose]() 自动调用
}
// camelCase: 变量、函数
const getUserData = async (userId) => { };
const isActive = true;
// UPPER_SNAKE_CASE: 模块级常量
const MAX_RETRIES = 3;
const API_TIMEOUT = 5000;
// PascalCase: 类、组件
class UserManager { }
function UserCard({ user }) { }
// kebab-case: 文件名
// user-service.js, api-client.js
// eslint.config.js
import js from '@eslint/js';
export default [
js.configs.recommended,
{
files: ['src/**/*.js', 'src/**/*.jsx'],
rules: {
'no-var': 'error',
'prefer-const': 'error',
'no-console': ['warn', { allow: ['warn', 'error'] }],
'prefer-arrow-callback': 'error',
'no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
}
}
];
src/
├── features/
│ ├── auth/
│ │ ├── hooks/
│ │ ├── services/
│ │ └── components/
│ └── shared/
├── config/
├── store/
└── main.js
| 现象 | 问题 | 严重程度 |
|------|------|---------|
| 使用 var | 作用域不清晰,禁止使用 | 高 |
| require() | 应使用 ESM import | 高 |
| arr.sort() | 变异原数组,应使用 .toSorted() | 中 |
| .eslintrc.js | 旧版配置,应迁移到 flat config | 中 |
| npm install | 应使用 pnpm | 中 |
| Jest 配置 | 应迁移到 Vitest 3.x | 中 |
| Webpack | 应迁移到 Vite 6 | 中 |
| moment.js | 应使用 date-fns 或 Temporal API | 低 |
"type": "module"tools
UI/UX 与布局设计——做界面布局/结构/导航/组件/交互的设计决策。触发:做UI/UX/布局/排版/导航/组件/交互/栅格/响应式/图表选型/字体配对。按媒介路由 HTML/Web、原生 App(iOS/Android/桌面)、CLI、TUI。需后端动态系统不适用;配色/主题/色板走姊妹 skill design-color。
tools
主题与配色设计——做颜色搭配/调色板/主题/品牌色阶/暗模式的设计决策。触发:选配色/调色/主题/色板/品牌色/暗模式/对比度/色盲/UI风格。按媒介路由 HTML/Web(CSS变量)、原生App(平台token)、CLI(ANSI)、TUI(真彩/256/16降级)。保证可访问性(对比度/色盲安全)。需后端动态系统不适用;UI/UX 布局/组件/交互走姊妹 skill design-uiux。
tools
跨任意组件(plugin/skill/agent/command)的验证驱动优化循环纪律 skill。当用户要优化某个已有组件却无明确方向、或要防止改了反而更差(自评乐观偏差 / 多维同改归因失效 / 为凑分加废话膨胀)、或要把一套通用「评分→单变量改→改后验证严格更好才留否则回滚→触顶停」的纪律套到任意组件上时使用。管优化过程本身的纪律(validation gate / ratchet / 独立验证 / 触顶停),不评单组件深度(交 skill-dev),不查插件接线(交 plugin-dev)。仅手动 /optimize-any 触发。
data-ai
两层规则记忆 (基于 .skein/spec)。planning 时 recall 召回相关规则、task finish 后 sediment 沉淀学习 + prune 自动精简过期/重复/断链规则。core 常驻硬规 + recall 按需召回, 经判定门自动写盘 (不逐次问用户)。产出 .skein/spec 下 core/recall 规则文件 + index。另支持空仓 bootstrap 播种规则基线、记忆大面积失效 (大重构/换栈) 时 reconstruct 可逆归档后按项目类型分型重建、maintain 手动体检 (超预算/stale/断链/重复/废弃, --apply 自动修复)、auto-fix (Stop hook 写 .pending-fix 标记 → main 派 skein-specer bg 跑 maintain --apply 全自动修, 断链只报告)。