AgentSkillsCN

typescript

在为TypeScript或Node.js项目配置开发容器时使用。涵盖Node特性、包管理器、ESLint/Prettier扩展,以及前端开发服务器的搭建。 适用范围:TypeScript/Node.js开发容器的搭建、Node特性、npm/pnpm/yarn配置、ESLint/Prettier扩展、前端开发服务器。 不适用范围:Python开发容器(使用python)、.NET开发容器(使用dotnet)、通用devcontainer.json(使用devcontainer)。

SKILL.md
--- frontmatter
name: typescript
description: |
    Use when configuring dev containers for TypeScript or Node.js projects. Covers the Node feature, package managers, ESLint/Prettier extensions, and frontend dev server setup.
    USE FOR: TypeScript/Node.js dev container setup, Node feature, npm/pnpm/yarn configuration, ESLint/Prettier extensions, frontend dev servers
    DO NOT USE FOR: Python dev containers (use python), .NET dev containers (use dotnet), general devcontainer.json (use devcontainer)
license: MIT
metadata:
  displayName: "Dev Container — TypeScript"
  author: "Tyler-R-Kendrick"
compatibility: claude, copilot, cursor

Dev Container — TypeScript

Overview

Configure a dev container for TypeScript and Node.js development using the official Node feature or base image. Supports version selection, package manager configuration (npm, pnpm, yarn), and frontend tooling.

Node Feature

jsonc
{
  "features": {
    "ghcr.io/devcontainers/features/node:1": {
      "version": "22"
    }
  }
}

Feature Options

OptionDefaultDescription
versionltsNode.js version (22, 20, lts, latest, none)
nodeGypDependenciestrueInstall native build dependencies for node-gyp
pnpmVersionnoneInstall pnpm (latest, 9, specific version, none)
nvmVersionlatestnvm version

Full Example

jsonc
{
  "name": "TypeScript Development",
  "image": "mcr.microsoft.com/devcontainers/javascript-node:22",
  "forwardPorts": [3000, 5173],
  "portsAttributes": {
    "3000": { "label": "API", "onAutoForward": "notify" },
    "5173": { "label": "Vite Dev Server", "onAutoForward": "openBrowser" }
  },
  "postCreateCommand": "npm ci",
  "postStartCommand": "npm run dev",
  "customizations": {
    "vscode": {
      "extensions": [
        "dbaeumer.vscode-eslint",
        "esbenp.prettier-vscode",
        "bradlc.vscode-tailwindcss"
      ],
      "settings": {
        "editor.defaultFormatter": "esbenp.prettier-vscode",
        "editor.formatOnSave": true,
        "editor.codeActionsOnSave": {
          "source.fixAll.eslint": "explicit"
        },
        "typescript.tsdk": "node_modules/typescript/lib"
      }
    }
  }
}

Using the Base Image vs Feature

ApproachWhen to Use
"image": "mcr.microsoft.com/devcontainers/javascript-node:22"Node/TS-only projects
"image": "mcr.microsoft.com/devcontainers/typescript-node:22"TypeScript-specific image
Base image + ghcr.io/devcontainers/features/node:1Multi-language projects

Package Managers

pnpm

jsonc
{
  "features": {
    "ghcr.io/devcontainers/features/node:1": {
      "version": "22",
      "pnpmVersion": "latest"
    }
  },
  "postCreateCommand": "pnpm install --frozen-lockfile"
}

Yarn

jsonc
{
  "postCreateCommand": "corepack enable && yarn install --immutable"
}

Monorepo Setup (Turborepo / Nx)

jsonc
{
  "name": "Monorepo",
  "image": "mcr.microsoft.com/devcontainers/javascript-node:22",
  "features": {
    "ghcr.io/devcontainers/features/node:1": {
      "pnpmVersion": "latest"
    }
  },
  "postCreateCommand": "pnpm install --frozen-lockfile",
  "postStartCommand": "pnpm dev",
  "forwardPorts": [3000, 3001, 5173]
}

Frontend Framework Ports

FrameworkDefault Port
Vite5173
Next.js3000
Angular4200
Create React App3000
Remix5173
Astro4321

Best Practices

  • Use npm ci or pnpm install --frozen-lockfile in postCreateCommand for deterministic installs.
  • Use postStartCommand for dev servers so they restart on Codespace resume.
  • Forward the dev server port and set "onAutoForward": "openBrowser" for quick feedback.
  • Set typescript.tsdk to the workspace TypeScript for consistent version behavior.
  • Add both ESLint and Prettier extensions and configure formatOnSave for consistent code style.
  • Pin Node.js to a major version (22, 20) rather than lts for reproducibility.
  • Use corepack enable for Yarn v2+ to use the project-local version.