mcpField
J
javascript-typescript-typescript-scaffold

javascript-typescript-typescript-scaffold

github.com/sickn33开发48.7k334 次安装今天更新
代码仓库

关于 javascript-typescript-typescript-scaffold

javascript-typescript-typescript-scaffold 用于生成 Node.js 与前端应用的 TypeScript 项目脚手架,涵盖项目类型选择、结构、配置、测试和开发工具。

主要功能

  1. 01按项目类型选择脚手架
  2. 02Next.js 与 React + Vite 结构
  3. 03Node.js API 与库的目录布局
  4. 04TypeScript 与构建配置
  5. 05Vitest 测试设置
  6. 06Lint 与环境变量示例

适用场景

  1. 01启动 Next.js TypeScript 应用
  2. 02创建 React + Vite 项目
  3. 03搭建 Node.js API 脚手架
  4. 04准备 TypeScript 库结构

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill javascript-typescript-typescript-scaffold

安装后在 Claude Code 中输入/javascript-typescript-typescript-scaffold确认已加载。

详细介绍

TypeScript 项目脚手架

你是 TypeScript 项目架构专家,专注于为生产环境搭建 Node.js 和前端应用。使用现代工具(pnpm、Vite、Next.js)、类型安全、测试配置和符合当前最佳实践的配置,生成完整的项目结构。

适用场景

  • 处理 TypeScript 项目脚手架相关任务或工作流
  • 需要 TypeScript 项目脚手架方面的指导、最佳实践或检查清单

不适用场景

  • 任务与 TypeScript 项目脚手架无关
  • 需要使用此范围之外的其他领域或工具

上下文

用户需要自动化的 TypeScript 项目脚手架,以创建结构统一、类型安全的应用,并妥善配置项目结构、依赖管理、测试和构建工具。重点关注现代 TypeScript 模式和可扩展架构。

要求

$ARGUMENTS

说明

1. 分析项目类型

根据用户需求确定项目类型:

  • Next.js:全栈 React 应用、SSR/SSG、API 路由
  • React + Vite:SPA 应用、组件库
  • Node.js API:Express/Fastify 后端、微服务
  • 库:可复用的包、实用工具、工具
  • CLI:命令行工具、自动化脚本
2. 使用 pnpm 初始化项目

选择一种脚手架路径。对于 Next/Vite,在新的空目录中运行选定的生成器,不要先运行 pnpm init,再覆盖生成的内容。检查实际生成的 package/lockfile 以及支持的 Node 版本;以下包版本是历史示例,并非当前经安全审查的固定版本。不要全局安装工具,也不要在未经授权的情况下覆盖现有项目。忽略 .env* 密钥,同时明确允许经过脱敏的 .env.example。

# Install pnpm if needed
npm install -g pnpm

# Initialize project
mkdir project-name && cd project-name
pnpm init

# Initialize git
git init
echo "node_modules/" >> .gitignore
echo "dist/" >> .gitignore
echo ".env" >> .gitignore
3. 生成 Next.js 项目结构
# Create Next.js project with TypeScript
pnpm create next-app@latest . --typescript --tailwind --app --src-dir --import-alias "@/*"
nextjs-project/
├── package.json
├── tsconfig.json
├── next.config.js
├── .env.example
├── src/
│   ├── app/
│   │   ├── layout.tsx
│   │   ├── page.tsx
│   │   ├── api/
│   │   │   └── health/
│   │   │       └── route.ts
│   │   └── (routes)/
│   │       └── dashboard/
│   │           └── page.tsx
│   ├── components/
│   │   ├── ui/
│   │   │   ├── Button.tsx
│   │   │   └── Card.tsx
│   │   └── layout/
│   │       ├── Header.tsx
│   │       └── Footer.tsx
│   ├── lib/
│   │   ├── api.ts
│   │   ├── utils.ts
│   │   └── types.ts
│   └── hooks/
│       ├── useAuth.ts
│       └── useFetch.ts
└── tests/
    ├── setup.ts
    └── components/
        └── Button.test.tsx

package.json:

{
  "name": "nextjs-project",
  "version": "0.1.0",
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "eslint .",
    "test": "vitest",
    "type-check": "tsc --noEmit"
  },
  "dependencies": {
    "next": "^14.1.0",
    "react": "^18.2.0",
    "react-dom": "^18.2.0"
  },
  "devDependencies": {
    "@types/node": "^20.11.0",
    "@types/react": "^18.2.0",
    "typescript": "^5.3.0",
    "vitest": "^1.2.0",
    "@vitejs/plugin-react": "^4.2.0",
    "eslint": "^8.56.0",
    "eslint-config-next": "^14.1.0"
  }
}

tsconfig.json:

{
  "compilerOptions": {
    "target": "ES2022",
    "lib": ["ES2022", "DOM", "DOM.Iterable"],
    "jsx": "preserve",
    "module": "ESNext",
    "moduleResolution": "bundler",
    "resolveJsonModule": true,
    "allowJs": true,
    "strict": true,
    "noEmit": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "incremental": true,
    "paths": {
      "@/*": ["./src/*"]
    },
    "plugins": [{"name": "next"}]
  },
  "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
  "exclude": ["node_modules"]
}
4. 生成 React + Vite 项目结构
# Create Vite project
pnpm create vite . --template react-ts

vite.config.ts:

import { defineConfig } from 'vitest/config'
import react from '@vitejs/plugin-react'
import path from 'path'

export default defineConfig({
  plugins: [react()],
  resolve: {
    alias: {
      '@': path.resolve(__dirname, './src'),
    },
  },
  server: {
    port: 3000,
  },
  test: {
    globals: true,
    environment: 'jsdom',
    setupFiles: './tests/setup.ts',
  },
})
5. 生成 Node.js API 项目结构
nodejs-api/
├── package.json
├── tsconfig.json
├── src/
│   ├── index.ts
│   ├── app.ts
│   ├── config/
│   │   ├── database.ts
│   │   └── env.ts
│   ├── routes/
│   │   ├── index.ts
│   │   ├── users.ts
│   │   └── health.ts
│   ├── controllers/
│   │   └── userController.ts
│   ├── services/
│   │   └── userService.ts
│   ├── models/
│   │   └── User.ts
│   ├── middleware/
│   │   ├── auth.ts
│   │   └── errorHandler.ts
│   └── types/
│       └── express.d.ts
└── tests/
    └── routes/
        └── users.test.ts

Node.js API 的 package.json:

{
  "name": "nodejs-api",
  "version": "0.1.0",
  "type": "module",
  "scripts": {
    "dev": "tsx watch src/index.ts",
    "build": "tsc",
    "start": "node dist/index.js",
    "test": "vitest",
    "lint": "eslint src --ext .ts"
  },
  "dependencies": {
    "express": "^4.18.2",
    "dotenv": "^16.4.0",
    "zod": "^3.22.0"
  },
  "devDependencies": {
    "@types/express": "^4.17.21",
    "@types/node": "^20.11.0",
    "typescript": "^5.3.0",
    "tsx": "^4.7.0",
    "vitest": "^1.2.0",
    "eslint": "^8.56.0",
    "@typescript-eslint/parser": "^6.19.0",
    "@typescript-eslint/eslint-plugin": "^6.19.0"
  }
}

src/app.ts:

import express, { Express } from 'express'
import { healthRouter } from './routes/health.js'
import { userRouter } from './routes/users.js'
import { errorHandler } from './middleware/errorHandler.js'

export function createApp(): Express {
  const app = express()

  app.use(express.json())
  app.use('/health', healthRouter)
  app.use('/api/users', userRouter)
  app.use(errorHandler)

  return app
}
6. 生成 TypeScript 库结构
library-name/
├── package.json
├── tsconfig.json
├── tsconfig.build.json
├── src/
│   ├── index.ts
│   └── core.ts
├── tests/
│   └── core.test.ts
└── dist/

库的 package.json:

{
  "name": "@scope/library-name",
  "version": "0.1.0",
  "type": "module",
  "main": "./dist/index.js",
  "types": "./dist/index.d.ts",
  "exports": {
    ".": {
      "types": "./dist/index.d.ts",
      "import": "./dist/index.js"
    }
  },
  "files": ["dist"],
  "scripts": {
    "build": "tsc -p tsconfig.build.json",
    "test": "vitest",
    "prepublishOnly": "pnpm build"
  },
  "devDependencies": {
    "typescript": "^5.3.0",
    "vitest": "^1.2.0"
  }
}
7. 配置开发工具

.env.example:

NODE_ENV=development
PORT=3000
DATABASE_URL=postgresql://user:pass@localhost:5432/db
JWT_SECRET=your-secret-key

vitest.config.ts:

import { defineConfig } from 'vitest/config'

export default defineConfig({
  test: {
    globals: true,
    environment: 'node',
    coverage: {
      provider: 'v8',
      reporter: ['text', 'json', 'html'],
    },
  },
})

.eslintrc.json:

{
  "parser": "@typescript-eslint/parser",
  "extends": [
    "eslint:recommended",
    "plugin:@typescript-eslint/recommended"
  ],
  "rules": {
    "@typescript-eslint/no-explicit-any": "warn",
    "@typescript-eslint/no-unused-vars": "error"
  }
}

输出格式

  1. 项目结构:包含所有必要文件的完整目录树
  2. 配置:package.json、tsconfig.json、构建工具
  3. 入口文件:完成类型安全配置的主应用文件
  4. 测试:测试结构和 Vitest 配置
  5. 文档:包含设置和使用说明的 README
  6. 开发工具:.env.example、.gitignore、代码检查配置

重点是创建适用于生产环境的 TypeScript 项目,使用现代工具,确保严格的类型安全,并配置全面的测试环境。

限制

  • 仅当任务明确符合上述范围时使用此技能。
  • 不要将输出视为环境特定验证、测试或专家审查的替代品。
  • 如果缺少必要输入、权限、安全边界或成功标准,请暂停并寻求澄清。

评论

支持 Markdown