# Yy Create Node Script

> 创建基于当前技能 `scripts/` 参考工程的 Node.js + TypeScript 脚本项目骨架，或按同一结构补齐空白/轻量脚本项目。 当用户需要快速落地命令行脚本、批处理脚本或文件处理流水线时触发，不用于后端服务、前端项目、单文件脚本片段或成熟项目重构。

- Skill: `bulls-cows/yy-create-node-script` (Agent Skill, multi-file: 25 files)
- Install (CLI): `npx skillmds@latest add bulls-cows/yy-create-node-script`
- Raw SKILL.md: https://api.skillmd.com/api/skills/bulls-cows/yy-create-node-script/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: bulls-cows (https://skillmd.com/u/bulls-cows)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/bulls-cows/yy-create-node-script

---


# 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`
- `.env`
- `package-lock.json`
- 其他缓存、临时目录、本地安装产物和业务运行资源

**建议处理方式**：

- `package-lock.json` 默认不复制，优先通过后续 `npm install` 重新生成
- `package.json`、`tsconfig.json`、`eslint.config.mjs`、`.prettierrc.json`、`.editorconfig`、`.gitignore`、`.npmrc`、`.nvmrc` 直接以 `scripts/` 同名文件为基准
- `.env.example` 可按用户给出的环境变量名称做最小替换，不写入真实密钥、真实路径或真实业务参数

### 步骤 4. 生成目录结构与基础配置

确保目标项目至少具备与参考工程一致的基础目录结构：

```text
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. 输出结果

输出以下内容：

1. **创建/补齐结果**：说明目标项目名称、目标目录和生成模式
2. **目录结构**：列出生成或补齐的关键目录和文件
3. **脱敏说明**：说明模板不包含真实业务资源、日志、密钥、可执行程序和运行数据
4. **定制摘要**：说明项目名称、脚本用途、环境变量和步骤流程的调整
5. **验证状态**：说明已执行的命令和结果；如未执行，说明建议用户执行的命令

## 安全边界

- 不复制真实 `.env`、日志、运行资源、业务样例、二进制可执行文件或用户私有数据
- 不把参考项目中的业务术语、业务路径、客户信息、车辆信息、设备信息或专用解析逻辑写入目标项目
- 不默认覆盖、删除或清空已有项目文件
- 不默认执行安装、构建、测试、网络请求或外部程序调用
- 不创建后端服务、前端应用或单文件脚本片段

## 相关资源

- `scripts/`：完整脱敏参考工程，也是目录结构、配置和基础源码的唯一权威来源
- `templates/project-structure.md`：目录结构与文件职责的轻量说明，权威来源仍为 `scripts/`

