API同步
- 作者仓库星标 0
- 作者更新于 实时读取
- 作者仓库 skills-registry
- 领域
- 通用
- 兼容 Agent
-
- Claude Code
- Cursor
- Cline
- Codex
- Windsurf
- Gemini CLI
- +20
- 信任分
- 88 / 100 · 社区维护
- 作者 / 版本 / 许可
- @tomevault-io · 未声明 license
- Token 消耗评级
- 低消耗
- 接入复杂程度
- 需简单配置
- 是否需要外部 API Key
- 不需要
- 兼容的系统
- macOS · Linux · Windows
- 底层运行要求
- Node.js
- 文件与系统权限
-
- 只读
- 允许写入 / 修改
- Shell 执行
- 网络行为
- 允许外网请求
- 安装命令数
- 26 条
档案由构建时根据 SKILL.md 与安装命令自动衍生,可能与作者实际意图存在差异。
需要注意: 未限定 allowed-tools,默认拥有全部工具权限。
---
name: javascript
description: | Use when this capability is needed. // Destructuring const { name, age = 18 } = user; const [f…
category: 通用
runtime: Node.js
---
# javascript 输出预览
## PART A: 任务判断
- 适用问题:通用任务拆解、检查和交付。
- 输入要求:目标材料、限制条件、期望输出和验收方式。
- 证据边界:围绕“ES6+ Features / Modules (ESM vs CommonJS) / Module Interop Issues”读取原文规则,不把推断写成作者承诺。
## PART B: 执行结果
- **01** 任务判断:确认你的需求是否属于通用任务拆解、检查和交付,并标出输入、限制和预期结果。
- **02** 执行计划:优先按“ES6+ Features / Modules (ESM vs CommonJS) / Module Interop Issues”拆成步骤,说明每一步会读取什么、修改什么、产出什么。
- **03** 交付结果:给出可复制的命令、文件改动、检查清单或内容草稿,并说明如何继续迭代。
- **04** 风险边界:结合 读取文件、写入/修改文件、执行终端命令、会按任务需要访问外部网络、通常不需要额外 API Key 给出执行前确认项。
## Running Rules
- 读取文件、写入/修改文件、执行终端命令;会按任务需要访问外部网络;通常不需要额外 API Key。
- 先小样例验证,再放大到真实任务。
- 交付时同时给结果、检查口径和下一步迭代建议。 原文出现了 `/api` 这类斜杠命令;如果你的 Agent 支持命令触发,优先用命令开场,再补充目标和边界。
告诉 Agent 目标文件或材料、期望结果、不可改范围、是否允许联网或执行命令。本 Skill 的权限画像是:读取文件、写入/修改文件、执行终端命令。
先用一个小任务确认它会围绕“ES6+ Features / Modules (ESM vs CommonJS) / Module Interop Issues”工作;涉及文件或命令时,先看 diff、日志、预览或测试结果。
检查最终产物是否包含明确结果、必要证据和下一步动作;如果输出泛泛而谈,就补充输入、边界和验收标准后重跑。
---
name: javascript
description: | Use when this capability is needed. // Destructuring const { name, age = 18 } = user; const [f…
category: 通用
source: tomevault-io/skills-registry
---
# javascript
## 什么时候使用
- 把通用方向的常用动作沉淀成 Agent 可调用的技能 适合处理通用任务拆解、检查、交付和复盘,核心价值是把输入、判断、执行、验证和交付边界固定下来,避免 Agent 泛泛回答。 把任务拆成可执行、可检查、可继续迭代的步骤;通常不需要额外…
- 面向通用任务拆解、检查和交付,优先处理能明确输入、步骤和验收标准的工作。
## 需要提供什么
- 目标材料、目录范围、期望结果和不可改动内容。
- 是否允许联网、执行命令、读写文件或调用外部服务。
## 执行规则
- 围绕「ES6+ Features / Modules (ESM vs CommonJS) / Module Interop Issues」组织步骤,不把推断写成作者事实。
- 读取文件、写入/修改文件、执行终端命令;会按任务需要访问外部网络;通常不需要额外 API Key。
- 先跑小样例,确认结果可检查后再扩大任务范围。
## 输出要求
- 给出最终产物、关键证据、验证方式和下一步动作。
- 信息不足时标记 unknown,不编造命令、平台或依赖。 作者原文负责流程事实;仓库文件负责来源和命令;流狐只补充适用场景、限制和质量判断。
skill "javascript" {
输入层 -> 用户目标 + 目标文件 + 禁止范围 + 验收标准
上下文层 -> ES6+ Features / Modules (ESM vs CommonJS) / Module Interop Issues
规则层 -> SKILL.md 触发条件 / 执行顺序 / 输出格式
运行层 -> Node.js | 读取文件、写入/修改文件、执行终端命令 | 会按任务需要访问外部网络
安全层 -> 通常不需要额外 API Key + 小任务验证 + diff / 日志复核
输出层 -> 可复制结果 + 检查清单 + 下一步迭代
} JavaScript Core Knowledge
Deep Knowledge: Use
mcp__documentation__fetch_docswith technology:javascriptfor comprehensive documentation.
ES6+ Features
// Destructuring
const { name, age = 18 } = user;
const [first, ...rest] = items;
// Spread operator
const merged = { ...defaults, ...options };
const combined = [...arr1, ...arr2];
// Template literals
const message = `Hello ${name}, you are ${age} years old`;
// Arrow functions
const add = (a, b) => a + b;
const fetchUser = async (id) => {
const response = await fetch(`/api/users/${id}`);
return response.json();
};
// Optional chaining & nullish coalescing
const city = user?.address?.city ?? 'Unknown';
// Logical assignment
user.name ||= 'Anonymous'; // Assign if falsy
user.data ??= {}; // Assign if null/undefined
user.count &&= user.count++; // Assign if truthy
Modules (ESM vs CommonJS)
// ESM (package.json: "type": "module")
import { readFile } from 'fs/promises';
import config from './config.js';
export const helper = () => {};
export default class Service {}
// CommonJS (default Node.js, .cjs)
const { readFile } = require('fs/promises');
const config = require('./config');
module.exports = { helper };
module.exports = Service;
// Dynamic imports (both)
const module = await import('./dynamic.js');
Module Interop Issues
// Importing CommonJS from ESM
import pkg from 'cjs-package'; // Default export = module.exports
import { named } from 'cjs-package'; // May not work!
// Fix: use createRequire
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
const cjsModule = require('cjs-package');
// __dirname / __filename in ESM
import { fileURLToPath } from 'url';
import { dirname } from 'path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
Async Patterns
// Promises
fetch('/api/data')
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error(err))
.finally(() => cleanup());
// Async/await
async function fetchData() {
try {
const response = await fetch('/api/data');
if (!response.ok) throw new Error(`HTTP ${response.status}`);
return await response.json();
} catch (error) {
console.error('Fetch failed:', error);
throw error;
}
}
// Parallel execution
const [users, products] = await Promise.all([
fetch('/api/users').then(r => r.json()),
fetch('/api/products').then(r => r.json()),
]);
// Promise utilities
await Promise.allSettled(promises); // Never rejects
const first = await Promise.race(promises);
const firstSuccess = await Promise.any(promises);
Array Methods
// Transform
const doubled = items.map(x => x * 2);
const names = users.map(u => u.name);
// Filter
const adults = users.filter(u => u.age >= 18);
const unique = [...new Set(items)];
// Find
const user = users.find(u => u.id === id);
const index = users.findIndex(u => u.id === id);
const exists = users.some(u => u.active);
const allActive = users.every(u => u.active);
// Reduce
const total = items.reduce((sum, x) => sum + x, 0);
const grouped = items.reduce((acc, item) => {
(acc[item.category] ||= []).push(item);
return acc;
}, {});
// Flat & FlatMap
const flat = [[1, 2], [3, 4]].flat();
const expanded = users.flatMap(u => u.orders);
// At (negative indexing)
const last = items.at(-1);
const secondLast = items.at(-2);
Object Methods
// Entries/Keys/Values
Object.keys(obj); // ['a', 'b']
Object.values(obj); // [1, 2]
Object.entries(obj); // [['a', 1], ['b', 2]]
// From entries
const obj = Object.fromEntries([['a', 1], ['b', 2]]);
// Assign & spread
const merged = Object.assign({}, defaults, options);
const merged2 = { ...defaults, ...options };
// Property descriptors
Object.defineProperty(obj, 'readonly', {
value: 42,
writable: false,
enumerable: true,
});
// Freeze/Seal
Object.freeze(obj); // No changes at all
Object.seal(obj); // No add/delete, can modify
Classes
class Service {
#privateField = 'secret'; // Private field
static count = 0; // Static field
constructor(name) {
this.name = name;
Service.count++;
}
// Instance method
greet() {
return `Hello, ${this.name}`;
}
// Private method
#validate() {
return this.#privateField.length > 0;
}
// Getter/Setter
get upperName() {
return this.name.toUpperCase();
}
set upperName(value) {
this.name = value.toLowerCase();
}
// Static method
static getCount() {
return Service.count;
}
}
// Inheritance
class Admin extends Service {
constructor(name, role) {
super(name);
this.role = role;
}
}
Error Handling
// Custom error
class ValidationError extends Error {
constructor(message, field) {
super(message);
this.name = 'ValidationError';
this.field = field;
}
}
// Try/catch with specific handling
try {
const data = JSON.parse(input);
} catch (error) {
if (error instanceof SyntaxError) {
console.error('Invalid JSON');
} else if (error instanceof ValidationError) {
console.error(`Validation failed: ${error.field}`);
} else {
throw error; // Re-throw unknown errors
}
}
// Error cause (ES2022)
try {
await fetchData();
} catch (error) {
throw new Error('Failed to load data', { cause: error });
}
When NOT to Use This Skill
| Scenario | Use Instead |
|---|---|
| TypeScript project | typescript skill |
| Node.js runtime internals | nodejs skill |
| Frontend frameworks | frontend-react, frontend-vue, etc. |
| Build tooling | vite, webpack, etc. skills |
| Testing | testing-vitest, testing-jest skills |
Anti-Patterns
| Anti-Pattern | Why It's Bad | Correct Approach |
|---|---|---|
Using var |
Function scope, hoisting issues | Use const or let |
== instead of === |
Type coercion bugs | Always use === |
| Mutating function parameters | Side effects, hard to debug | Return new object/array |
Missing await on Promise |
Unhandled rejections | Always await or .catch() |
| Mixing ESM and CommonJS | Module system conflicts | Choose one, prefer ESM |
| Callback hell | Unreadable code | Use async/await |
| Not handling Promise rejections | Silent failures | Add .catch() or try/catch |
| Global variables | Namespace pollution | Use modules |
Quick Troubleshooting
| Issue | Cause | Solution |
|---|---|---|
| "X is not defined" | Variable not declared | Check spelling, imports |
| "Cannot read property of undefined" | Object is undefined | Use optional chaining ?. |
| "Promise rejected but not handled" | Missing .catch() | Add error handling |
| "Module not found" | Wrong import path | Check file path, extension |
| "Unexpected token" | Syntax error | Check for missing brackets, commas |
| "This is undefined" | Arrow function context | Use regular function or bind |
| Memory leak in event listeners | Not removing listeners | Use removeEventListener |
| Slow performance with large arrays | Inefficient algorithms | Use appropriate data structures |
When to Use JS vs TypeScript
| Scenario | Choice |
|---|---|
| New project | TypeScript |
| Quick scripts | JavaScript |
| Legacy codebase | JavaScript (gradual migration) |
| Public libraries | TypeScript with .d.ts |
| Prototype/MVP | JavaScript ok |
Reference Documentation
Deep Knowledge: Use
mcp__documentation__fetch_docswith technology:javascriptfor comprehensive documentation.
Source: claude-dev-suite/claude-dev-suite — distributed by TomeVault.
先判断是否适合
作者设计意图
作者的方法与取舍
边界和复核