一键导入
project-ts-init
从零初始化一个 TypeScript Node.js 项目,搭建完整的工程基础设施(构建、格式化、Lint、Git hooks、Commit 规范)。当用户说"初始化 ts 项目"、"新建 ts 项目"、"搭建工程配置"、"init ts project"或输入 /ts-init 时触发。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
从零初始化一个 TypeScript Node.js 项目,搭建完整的工程基础设施(构建、格式化、Lint、Git hooks、Commit 规范)。当用户说"初始化 ts 项目"、"新建 ts 项目"、"搭建工程配置"、"init ts project"或输入 /ts-init 时触发。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Review a GitHub Pull Request for the PocketRelay project. 触发时机:用户说"review PR"、"看一下PR"、"review
分析当前 git 变更,生成符合 Conventional Commits 规范的提交。当用户说"帮我提交"、"commit 一下"、"提交代码"或输入 /commit 时触发。
开始新功能或修复前的标准流程:同步 main、切新分支、推送到远程。当用户说"开始新功能"、"切分支"、"新建分支"、"开始开发"、"new branch"或输入 /new-branch 时触发。
基于当前分支与目标分支的差异,使用 gh CLI 创建 GitHub Pull Request。当用户说"创建 PR"、"提 PR"、"开 PR"、"pr-create"或输入 /pr-create 时触发。
拉取当前 PR 所有未解决的 review 评论,分析问题并给出解决方案,询问用户是否修复。当用户说"处理 PR 评论"、"修复 review 意见"、"fix comments"、"解决评论"或输入 /pr-fix-comments 时触发。
根据本次工作内容,同步更新项目文档,保持文档与代码实现一致。当用户说"更新文档"、"同步文档"、"文档过时了"、"更新 CLAUDE.md"、"更新 AGENTS.md"、"更新 README"或输入 /sync-docs 时触发。完成功能开发、bug 修复、架构调整后也应主动提示使用。
| name | project-ts-init |
| description | 从零初始化一个 TypeScript Node.js 项目,搭建完整的工程基础设施(构建、格式化、Lint、Git hooks、Commit 规范)。当用户说"初始化 ts 项目"、"新建 ts 项目"、"搭建工程配置"、"init ts project"或输入 /ts-init 时触发。 |
从零创建一个工程配置完整的 TypeScript Node.js 项目。
向用户询问以下信息(如果已经说明则跳过):
name 字段)cli — 命令行工具(需要 shebang、bin 字段)lib — 库(需要 exports/main/types 字段)service — 后端服务no — 单包项目pnpm workspace — pnpm 原生 workspacerush / turborepo / nx — 其他 monorepo 方案tsup — 推荐,esbuild 封装,零配置tsdown — tsup 的新替代,API 兼容tsc — 纯 TypeScript 编译,不 bundle根据收集到的信息,输出配置方案摘要,在用户确认前不创建任何文件:
将创建以下配置:
- 包管理器: pnpm
- 构建工具: tsup (CJS 输出)
- 格式化: Prettier(无分号、单引号、100 宽)
- Lint: ESLint v9 Flat Config + typescript-eslint + eslint-config-prettier
- Git hooks: husky v9 + lint-staged(pre-commit 格式化+lint)
- Commit 规范: commitlint + Conventional Commits
- Git 配置: pull.rebase=true
用户确认后,创建以下文件:
package.jsonCLI 类型:
{
"name": "<project-name>",
"version": "0.1.0",
"private": true,
"type": "module",
"bin": { "<project-name>": "./dist/index.cjs" },
"scripts": {
"build": "tsup",
"dev": "tsup --watch",
"lint": "eslint \"src/**/*.ts\"",
"format": "prettier --write \"src/**/*.ts\"",
"prepare": "husky"
},
"lint-staged": {
"src/**/*.ts": ["prettier --write", "eslint --fix", "eslint"]
}
}
lib 类型去掉 bin,加 "main": "./dist/index.cjs" 和 "exports";service 类型去掉 bin。
tsconfig.json{
"compilerOptions": {
"target": "ES2022",
"module": "ESNext",
"moduleResolution": "Bundler",
"lib": ["ES2022"],
"strict": true,
"declaration": true,
"declarationMap": true,
"sourceMap": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
},
"include": ["src"]
}
tsup.config.tsimport { defineConfig } from 'tsup'
export default defineConfig({
entry: ['src/index.ts'],
format: ['cjs'],
platform: 'node',
target: 'node20',
outDir: 'dist',
outExtension: () => ({ js: '.cjs' }),
clean: true,
bundle: true,
esbuildOptions(options) {
options.external = ['fsevents']
// CLI 类型才需要 shebang,lib/service 去掉这行
options.banner = { js: '#!/usr/bin/env node' }
}
})
.prettierrc{
"semi": false,
"trailingComma": "none",
"arrowParens": "avoid",
"printWidth": 100,
"singleQuote": true,
"tabWidth": 2
}
eslint.config.jsimport js from '@eslint/js'
import tseslint from 'typescript-eslint'
import prettierConfig from 'eslint-config-prettier'
export default tseslint.config(
js.configs.recommended,
...tseslint.configs.recommended,
prettierConfig,
{ ignores: ['**/dist/**', '**/node_modules/**'] },
{
rules: {
'@typescript-eslint/no-explicit-any': 'warn',
'@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
},
},
)
commitlint.config.jsexport default { extends: ['@commitlint/config-conventional'] }
.husky/pre-commitpnpm exec lint-staged
.husky/commit-msgpnpm exec commitlint --edit "$1"
.gitignorenode_modules/
dist/
*.local
.env*
!.env.example
src/index.ts// Entry point
pnpm add -D typescript @types/node tsup prettier \
eslint @eslint/js typescript-eslint eslint-config-prettier \
husky lint-staged \
@commitlint/cli @commitlint/config-conventional
pnpm exec husky init
git init # 如果还不是 git 仓库
git config pull.rebase true
pnpm workspace:根目录创建 pnpm-workspace.yaml:
packages:
- packages/*
tsconfig.json 补充 paths 和 references 指向子包。
Rush:输出引导信息,Rush 接管依赖安装和构建编排,建议参考官方 rush init 流程,Prettier/ESLint/husky 配置同上。
Turborepo / Nx:建议先用官方脚手架初始化骨架(pnpm dlx create-turbo / create-nx-workspace),再按上述补充格式化和 lint 配置。
pnpm build
pnpm lint
输出完成提示,说明已创建的文件列表和可用命令。