name: yy-create-node-script
description: >
创建基于当前技能 scripts/ 参考工程的 Node.js + TypeScript 脚本项目骨架,或按同一结构补齐空白/轻量脚本项目。
当用户需要快速落地命令行脚本、批处理脚本或文件处理流水线时触发,不用于后端服务、前端项目、单文件脚本片段或成熟项目重构。
yy-create-node-script
描述
基于当前技能目录下 scripts/ 的权威参考工程,创建或补齐 Node.js + TypeScript 脚本项目。模板由真实脚本项目脱敏提炼而来,只保留通用脚本工程能力:环境参数读取、步骤编排、文件读写、日志输出、基础测试和代码检查配置。
使用场景
- 用户需要新建 Node.js + TypeScript 脚本项目
- 用户需要生成命令行脚本、批处理脚本或文件处理流水线的标准目录结构
- 用户需要在空白或轻量项目中补齐脚本工程基础设施
- 用户希望复用当前技能
scripts/参考工程中的配置、源码骨架和测试结构
不应触发:
- 用户只需要单个 JavaScript 或 TypeScript 代码片段
- 用户要创建 Express、NestJS、Koa 等后端服务项目
- 用户要创建 Vue、React、Angular 等前端项目
- 用户要对成熟现有项目做大规模迁移、重构或架构改造
- 用户只是询问 Node.js、TypeScript 或命令行参数的概念和用法
指令
步骤 1. 确认任务边界与最小输入
收集完成任务所需的最小信息:
- 项目名称,使用英文短横线命名,如
my-node-script - 目标目录
- 脚本用途,用一句话描述输入、处理和输出
- 必需环境变量,默认使用
INPUT_FILE和OUTPUT_FILE - 是否需要保留模板的三段式处理流程,默认保留
- 是否执行依赖安装与验证
- 目标目录是新目录、空目录还是已有项目目录
决策分支:
- 用户已提供关键信息:直接进入步骤 2
- 仅缺少少量必要信息:只追问缺失项,不重复确认已明确内容
- 目标目录已有内容但处理边界不明:先确认只做补齐或对齐,不默认覆盖、删除或清空现有文件
步骤 2. 判定生成模式
以当前技能目录下的 scripts/ 为唯一权威参考,以 templates/ 中的轻量说明为快速校准材料。
决策分支:
- 目标目录不存在或为空目录:按“新建项目”模式处理,复制参考工程的基础骨架,再做最小定制
- 目标目录已有少量工程文件,且用户明确要求对齐结构:按“补齐项目”模式处理,只新增缺失文件或修改与本次目标直接相关的文件
- 目标目录已有成熟工程内容:说明该技能只适合脚手架创建和轻量对齐,要求用户缩小范围后再继续
步骤 3. 复制参考工程并过滤无效产物
从 scripts/ 复制项目骨架时,只保留可作为脚手架的一次性源文件,不复制缓存、安装产物和敏感运行数据。
决策分支:
- 新建项目模式:复制
scripts/中的基础目录、配置文件、源码骨架和测试文件 - 补齐项目模式:逐项对照
scripts/,只补齐缺失的目录、配置和基础源码文件
禁止复制的内容:
node_modules/dist/coverage/logs/.eslintcache.envpackage-lock.json- 其他缓存、临时目录、本地安装产物和业务运行资源
建议处理方式:
package-lock.json默认不复制,优先通过后续npm install重新生成package.json、tsconfig.json、eslint.config.mjs、.prettierrc.json、.editorconfig、.gitignore、.npmrc、.nvmrc直接以scripts/同名文件为基准.env.example可按用户给出的环境变量名称做最小替换,不写入真实密钥、真实路径或真实业务参数
步骤 4. 生成目录结构与基础配置
确保目标项目至少具备与参考工程一致的基础目录结构:
project-name/
├── src/
│ ├── constants/
│ ├── steps/
│ ├── typings/
│ └── utils/
└── test/
配置文件处理规则:
- 复制
scripts/package.json后,仅调整项目名称、描述和用户明确要求的元数据 - 保持
type: "module"、main: "src/main.ts"和#src/*、#steps/*、#utils/*、#constants/*导入映射 - 保持
scripts/tsconfig.json中的 Node.js ESM 与 TypeScript 严格模式配置 - 保持
scripts/eslint.config.mjs、scripts/.prettierrc.json、scripts/.editorconfig、scripts/.gitignore的基础约束 - 若用户需要额外环境变量,只更新
.env.example和src/constants/env.ts中与本次目标直接相关的字段
步骤 5. 生成脚本流水线源码
优先复制 scripts/src/ 和 scripts/test/ 的基础文件,再围绕用户输入做最小定制。
必须保留的通用能力:
src/main.ts作为统一入口,负责读取环境变量、调用步骤、记录结果和设置退出码src/steps/按输入、转换、输出拆分处理流程src/utils/放置文件、日志、进程、字符串和时间工具src/typings/放置跨模块复用的结果类型test/使用 Node.js 内置测试运行器验证主流程
决策分支:
- 用户没有提供具体业务步骤:保留模板中的
read-input、transform-records、write-output三段式流程 - 用户提供了业务步骤名称:只调整步骤目录名、函数名和 README 说明,不引入真实业务数据或不可验证实现
- 用户提供了真实敏感路径、密钥或业务样例:改写为占位示例,真实值只应由目标项目运行时自行配置
步骤 6. 安装依赖与验证
根据用户授权决定是否执行安装和验证。
决策分支:
- 用户明确要求安装依赖:在目标项目目录执行
npm install - 用户明确要求验证:按顺序执行
npm run typecheck、npm test、npm run lint - 用户未授权执行安装或验证:不主动执行耗时命令,只在交付结果中给出建议命令
- 验证失败:只修复与本次生成或定制直接相关的问题,不处理目标项目原有无关问题
步骤 7. 补齐 lint 支持
在项目创建或补齐完成后,检测当前环境是否可用 yy-enable-lint 技能,并在可用时触发该技能为项目添加 npm run lint 支持。
决策分支:
- 当前环境可用
yy-enable-lint:在目标项目目录触发yy-enable-lint,使其按项目技术栈补齐 lint 支持 - 当前环境不可用
yy-enable-lint:不阻塞项目生成,跳过 lint 补齐 - 用户明确要求不补齐 lint 支持:跳过,仅在交付结果中说明
yy-enable-lint执行失败:记录失败原因,不扩大处理范围
步骤 8. 输出结果
输出以下内容:
- 创建/补齐结果:说明目标项目名称、目标目录和生成模式
- 目录结构:列出生成或补齐的关键目录和文件
- 脱敏说明:说明模板不包含真实业务资源、日志、密钥、可执行程序和运行数据
- 定制摘要:说明项目名称、脚本用途、环境变量和步骤流程的调整
- 验证状态:说明已执行的命令和结果;如未执行,说明建议用户执行的命令
安全边界
- 不复制真实
.env、日志、运行资源、业务样例、二进制可执行文件或用户私有数据 - 不把参考项目中的业务术语、业务路径、客户信息、车辆信息、设备信息或专用解析逻辑写入目标项目
- 不默认覆盖、删除或清空已有项目文件
- 不默认执行安装、构建、测试、网络请求或外部程序调用
- 不创建后端服务、前端应用或单文件脚本片段
相关资源
scripts/:完整脱敏参考工程,也是目录结构、配置和基础源码的唯一权威来源templates/project-structure.md:目录结构与文件职责的轻量说明,权威来源仍为scripts/