[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6HR6PMFADVT2NN95K46GEXR":3,"skill-same:01M6HR6PMFADVT2NN95K46GEXR":70},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":45,"linkOnly":46,"markdownContent":47,"markdownBody":48,"frontMatter":49,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":53,"repositoryHtmlUrl":54,"repositoryHomepageUrl":6,"ownerHtmlUrl":55,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":56,"install":57,"resources":69},"01M6HR6PMFADVT2NN95K46GEXR","monorepo-management",null,"Master monorepo management with Turborepo, Nx, and pnpm workspaces to build efficient, scalable multi-package repositories with optimized builds and dependency management. Use when setting up monorepos, optimizing builds, or managing shared dependencies.","welflau\u002Fai-dev-system","welflau","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F7010385?v=4","01M6HPTDGF18RFY07M229P8CTM","01M6HPTDMRMZCJPYBFEA9XVVYT",3,"MIT","https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fskills\u002Fmarketplace\u002Fcodebuddy-plugins-official\u002Fexternal_plugins\u002Fdeveloper-essentials\u002Fskills\u002Fmonorepo-management\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],"monorepo","management","monorepo management","repositories","package","when","multi-package","with","Scalable","nx","multi","pnpm","shared","dependencies","build","master","workspaces","up","dependency","use","dependency management","turborepo","2026-11-10 10:12:30",false,"---\nname: monorepo-management\ndescription: Master monorepo management with Turborepo, Nx, and pnpm workspaces to build efficient, scalable multi-package repositories with optimized builds and dependency management. Use when setting up monorepos, optimizing builds, or managing shared dependencies.\n---\n\n# Monorepo Management\n\nBuild efficient, scalable monorepos that enable code sharing, consistent tooling, and atomic changes across multiple packages and applications.\n\n## When to Use This Skill\n\n- Setting up new monorepo projects\n- Migrating from multi-repo to monorepo\n- Optimizing build and test performance\n- Managing shared dependencies\n- Implementing code sharing strategies\n- Setting up CI\u002FCD for monorepos\n- Versioning and publishing packages\n- Debugging monorepo-specific issues\n\n## Core Concepts\n\n### 1. Why Monorepos?\n\n**Advantages:**\n- Shared code and dependencies\n- Atomic commits across projects\n- Consistent tooling and standards\n- Easier refactoring\n- Simplified dependency management\n- Better code visibility\n\n**Challenges:**\n- Build performance at scale\n- CI\u002FCD complexity\n- Access control\n- Large Git repository\n\n### 2. Monorepo Tools\n\n**Package Managers:**\n- pnpm workspaces (recommended)\n- npm workspaces\n- Yarn workspaces\n\n**Build Systems:**\n- Turborepo (recommended for most)\n- Nx (feature-rich, complex)\n- Lerna (older, maintenance mode)\n\n## Turborepo Setup\n\n### Initial Setup\n\n```bash\n# Create new monorepo\nnpx create-turbo@latest my-monorepo\ncd my-monorepo\n\n# Structure:\n# apps\u002F\n#   web\u002F          - Next.js app\n#   docs\u002F         - Documentation site\n# packages\u002F\n#   ui\u002F           - Shared UI components\n#   config\u002F       - Shared configurations\n#   tsconfig\u002F     - Shared TypeScript configs\n# turbo.json      - Turborepo configuration\n# package.json    - Root package.json\n```\n\n### Configuration\n\n```json\n\u002F\u002F turbo.json\n{\n  \"$schema\": \"https:\u002F\u002Fturbo.build\u002Fschema.json\",\n  \"globalDependencies\": [\"**\u002F.env.*local\"],\n  \"pipeline\": {\n    \"build\": {\n      \"dependsOn\": [\"^build\"],\n      \"outputs\": [\"dist\u002F**\", \".next\u002F**\", \"!.next\u002Fcache\u002F**\"]\n    },\n    \"test\": {\n      \"dependsOn\": [\"build\"],\n      \"outputs\": [\"coverage\u002F**\"]\n    },\n    \"lint\": {\n      \"outputs\": []\n    },\n    \"dev\": {\n      \"cache\": false,\n      \"persistent\": true\n    },\n    \"type-check\": {\n      \"dependsOn\": [\"^build\"],\n      \"outputs\": []\n    }\n  }\n}\n```\n\n```json\n\u002F\u002F package.json (root)\n{\n  \"name\": \"my-monorepo\",\n  \"private\": true,\n  \"workspaces\": [\n    \"apps\u002F*\",\n    \"packages\u002F*\"\n  ],\n  \"scripts\": {\n    \"build\": \"turbo run build\",\n    \"dev\": \"turbo run dev\",\n    \"test\": \"turbo run test\",\n    \"lint\": \"turbo run lint\",\n    \"format\": \"prettier --write \\\"**\u002F*.{ts,tsx,md}\\\"\",\n    \"clean\": \"turbo run clean && rm -rf node_modules\"\n  },\n  \"devDependencies\": {\n    \"turbo\": \"^1.10.0\",\n    \"prettier\": \"^3.0.0\",\n    \"typescript\": \"^5.0.0\"\n  },\n  \"packageManager\": \"pnpm@8.0.0\"\n}\n```\n\n### Package Structure\n\n```json\n\u002F\u002F packages\u002Fui\u002Fpackage.json\n{\n  \"name\": \"@repo\u002Fui\",\n  \"version\": \"0.0.0\",\n  \"private\": true,\n  \"main\": \".\u002Fdist\u002Findex.js\",\n  \"types\": \".\u002Fdist\u002Findex.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"import\": \".\u002Fdist\u002Findex.js\",\n      \"types\": \".\u002Fdist\u002Findex.d.ts\"\n    },\n    \".\u002Fbutton\": {\n      \"import\": \".\u002Fdist\u002Fbutton.js\",\n      \"types\": \".\u002Fdist\u002Fbutton.d.ts\"\n    }\n  },\n  \"scripts\": {\n    \"build\": \"tsup src\u002Findex.ts --format esm,cjs --dts\",\n    \"dev\": \"tsup src\u002Findex.ts --format esm,cjs --dts --watch\",\n    \"lint\": \"eslint src\u002F\",\n    \"type-check\": \"tsc --noEmit\"\n  },\n  \"devDependencies\": {\n    \"@repo\u002Ftsconfig\": \"workspace:*\",\n    \"tsup\": \"^7.0.0\",\n    \"typescript\": \"^5.0.0\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18.2.0\"\n  }\n}\n```\n\n## pnpm Workspaces\n\n### Setup\n\n```yaml\n# pnpm-workspace.yaml\npackages:\n  - 'apps\u002F*'\n  - 'packages\u002F*'\n  - 'tools\u002F*'\n```\n\n```json\n\u002F\u002F .npmrc\n# Hoist shared dependencies\nshamefully-hoist=true\n\n# Strict peer dependencies\nauto-install-peers=true\nstrict-peer-dependencies=true\n\n# Performance\nstore-dir=~\u002F.pnpm-store\n```\n\n### Dependency Management\n\n```bash\n# Install dependency in specific package\npnpm add react --filter @repo\u002Fui\npnpm add -D typescript --filter @repo\u002Fui\n\n# Install workspace dependency\npnpm add @repo\u002Fui --filter web\n\n# Install in all packages\npnpm add -D eslint -w\n\n# Update all dependencies\npnpm update -r\n\n# Remove dependency\npnpm remove react --filter @repo\u002Fui\n```\n\n### Scripts\n\n```bash\n# Run script in specific package\npnpm --filter web dev\npnpm --filter @repo\u002Fui build\n\n# Run in all packages\npnpm -r build\npnpm -r test\n\n# Run in parallel\npnpm -r --parallel dev\n\n# Filter by pattern\npnpm --filter \"@repo\u002F*\" build\npnpm --filter \"...web\" build  # Build web and dependencies\n```\n\n## Nx Monorepo\n\n### Setup\n\n```bash\n# Create Nx monorepo\nnpx create-nx-workspace@latest my-org\n\n# Generate applications\nnx generate @nx\u002Freact:app my-app\nnx generate @nx\u002Fnext:app my-next-app\n\n# Generate libraries\nnx generate @nx\u002Freact:lib ui-components\nnx generate @nx\u002Fjs:lib utils\n```\n\n### Configuration\n\n```json\n\u002F\u002F nx.json\n{\n  \"extends\": \"nx\u002Fpresets\u002Fnpm.json\",\n  \"$schema\": \".\u002Fnode_modules\u002Fnx\u002Fschemas\u002Fnx-schema.json\",\n  \"targetDefaults\": {\n    \"build\": {\n      \"dependsOn\": [\"^build\"],\n      \"inputs\": [\"production\", \"^production\"],\n      \"cache\": true\n    },\n    \"test\": {\n      \"inputs\": [\"default\", \"^production\", \"{workspaceRoot}\u002Fjest.preset.js\"],\n      \"cache\": true\n    },\n    \"lint\": {\n      \"inputs\": [\"default\", \"{workspaceRoot}\u002F.eslintrc.json\"],\n      \"cache\": true\n    }\n  },\n  \"namedInputs\": {\n    \"default\": [\"{projectRoot}\u002F**\u002F*\", \"sharedGlobals\"],\n    \"production\": [\n      \"default\",\n      \"!{projectRoot}\u002F**\u002F?(*.)+(spec|test).[jt]s?(x)?(.snap)\",\n      \"!{projectRoot}\u002Ftsconfig.spec.json\"\n    ],\n    \"sharedGlobals\": []\n  }\n}\n```\n\n### Running Tasks\n\n```bash\n# Run task for specific project\nnx build my-app\nnx test ui-components\nnx lint utils\n\n# Run for affected projects\nnx affected:build\nnx affected:test --base=main\n\n# Visualize dependencies\nnx graph\n\n# Run in parallel\nnx run-many --target=build --all --parallel=3\n```\n\n## Shared Configurations\n\n### TypeScript Configuration\n\n```json\n\u002F\u002F packages\u002Ftsconfig\u002Fbase.json\n{\n  \"compilerOptions\": {\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"bundler\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"incremental\": true,\n    \"declaration\": true\n  },\n  \"exclude\": [\"node_modules\"]\n}\n\n\u002F\u002F packages\u002Ftsconfig\u002Freact.json\n{\n  \"extends\": \".\u002Fbase.json\",\n  \"compilerOptions\": {\n    \"jsx\": \"react-jsx\",\n    \"lib\": [\"ES2022\", \"DOM\", \"DOM.Iterable\"]\n  }\n}\n\n\u002F\u002F apps\u002Fweb\u002Ftsconfig.json\n{\n  \"extends\": \"@repo\u002Ftsconfig\u002Freact.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"dist\",\n    \"rootDir\": \"src\"\n  },\n  \"include\": [\"src\"],\n  \"exclude\": [\"node_modules\", \"dist\"]\n}\n```\n\n### ESLint Configuration\n\n```javascript\n\u002F\u002F packages\u002Fconfig\u002Feslint-preset.js\nmodule.exports = {\n  extends: [\n    'eslint:recommended',\n    'plugin:@typescript-eslint\u002Frecommended',\n    'plugin:react\u002Frecommended',\n    'plugin:react-hooks\u002Frecommended',\n    'prettier',\n  ],\n  plugins: ['@typescript-eslint', 'react', 'react-hooks'],\n  parser: '@typescript-eslint\u002Fparser',\n  parserOptions: {\n    ecmaVersion: 2022,\n    sourceType: 'module',\n    ecmaFeatures: {\n      jsx: true,\n    },\n  },\n  settings: {\n    react: {\n      version: 'detect',\n    },\n  },\n  rules: {\n    '@typescript-eslint\u002Fno-unused-vars': 'error',\n    'react\u002Freact-in-jsx-scope': 'off',\n  },\n};\n\n\u002F\u002F apps\u002Fweb\u002F.eslintrc.js\nmodule.exports = {\n  extends: ['@repo\u002Fconfig\u002Feslint-preset'],\n  rules: {\n    \u002F\u002F App-specific rules\n  },\n};\n```\n\n## Code Sharing Patterns\n\n### Pattern 1: Shared UI Components\n\n```typescript\n\u002F\u002F packages\u002Fui\u002Fsrc\u002Fbutton.tsx\nimport * as React from 'react';\n\nexport interface ButtonProps {\n  variant?: 'primary' | 'secondary';\n  children: React.ReactNode;\n  onClick?: () => void;\n}\n\nexport function Button({ variant = 'primary', children, onClick }: ButtonProps) {\n  return (\n    \u003Cbutton\n      className={`btn btn-${variant}`}\n      onClick={onClick}\n    >\n      {children}\n    \u003C\u002Fbutton>\n  );\n}\n\n\u002F\u002F packages\u002Fui\u002Fsrc\u002Findex.ts\nexport { Button, type ButtonProps } from '.\u002Fbutton';\nexport { Input, type InputProps } from '.\u002Finput';\n\n\u002F\u002F apps\u002Fweb\u002Fsrc\u002Fapp.tsx\nimport { Button } from '@repo\u002Fui';\n\nexport function App() {\n  return \u003CButton variant=\"primary\">Click me\u003C\u002FButton>;\n}\n```\n\n### Pattern 2: Shared Utilities\n\n```typescript\n\u002F\u002F packages\u002Futils\u002Fsrc\u002Fstring.ts\nexport function capitalize(str: string): string {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nexport function truncate(str: string, length: number): string {\n  return str.length > length ? str.slice(0, length) + '...' : str;\n}\n\n\u002F\u002F packages\u002Futils\u002Fsrc\u002Findex.ts\nexport * from '.\u002Fstring';\nexport * from '.\u002Farray';\nexport * from '.\u002Fdate';\n\n\u002F\u002F Usage in apps\nimport { capitalize, truncate } from '@repo\u002Futils';\n```\n\n### Pattern 3: Shared Types\n\n```typescript\n\u002F\u002F packages\u002Ftypes\u002Fsrc\u002Fuser.ts\nexport interface User {\n  id: string;\n  email: string;\n  name: string;\n  role: 'admin' | 'user';\n}\n\nexport interface CreateUserInput {\n  email: string;\n  name: string;\n  password: string;\n}\n\n\u002F\u002F Used in both frontend and backend\nimport type { User, CreateUserInput } from '@repo\u002Ftypes';\n```\n\n## Build Optimization\n\n### Turborepo Caching\n\n```json\n\u002F\u002F turbo.json\n{\n  \"pipeline\": {\n    \"build\": {\n      \u002F\u002F Build depends on dependencies being built first\n      \"dependsOn\": [\"^build\"],\n\n      \u002F\u002F Cache these outputs\n      \"outputs\": [\"dist\u002F**\", \".next\u002F**\"],\n\n      \u002F\u002F Cache based on these inputs (default: all files)\n      \"inputs\": [\"src\u002F**\u002F*.tsx\", \"src\u002F**\u002F*.ts\", \"package.json\"]\n    },\n    \"test\": {\n      \u002F\u002F Run tests in parallel, don't depend on build\n      \"cache\": true,\n      \"outputs\": [\"coverage\u002F**\"]\n    }\n  }\n}\n```\n\n### Remote Caching\n\n```bash\n# Turborepo Remote Cache (Vercel)\nnpx turbo login\nnpx turbo link\n\n# Custom remote cache\n# turbo.json\n{\n  \"remoteCache\": {\n    \"signature\": true,\n    \"enabled\": true\n  }\n}\n```\n\n## CI\u002FCD for Monorepos\n\n### GitHub Actions\n\n```yaml\n# .github\u002Fworkflows\u002Fci.yml\nname: CI\n\non:\n  push:\n    branches: [main]\n  pull_request:\n    branches: [main]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions\u002Fcheckout@v3\n        with:\n          fetch-depth: 0  # For Nx affected commands\n\n      - uses: pnpm\u002Faction-setup@v2\n        with:\n          version: 8\n\n      - uses: actions\u002Fsetup-node@v3\n        with:\n          node-version: 18\n          cache: 'pnpm'\n\n      - name: Install dependencies\n        run: pnpm install --frozen-lockfile\n\n      - name: Build\n        run: pnpm turbo run build\n\n      - name: Test\n        run: pnpm turbo run test\n\n      - name: Lint\n        run: pnpm turbo run lint\n\n      - name: Type check\n        run: pnpm turbo run type-check\n```\n\n### Deploy Affected Only\n\n```yaml\n# Deploy only changed apps\n- name: Deploy affected apps\n  run: |\n    if pnpm nx affected:apps --base=origin\u002Fmain --head=HEAD | grep -q \"web\"; then\n      echo \"Deploying web app\"\n      pnpm --filter web deploy\n    fi\n```\n\n## Best Practices\n\n1. **Consistent Versioning**: Lock dependency versions across workspace\n2. **Shared Configs**: Centralize ESLint, TypeScript, Prettier configs\n3. **Dependency Graph**: Keep it acyclic, avoid circular dependencies\n4. **Cache Effectively**: Configure inputs\u002Foutputs correctly\n5. **Type Safety**: Share types between frontend\u002Fbackend\n6. **Testing Strategy**: Unit tests in packages, E2E in apps\n7. **Documentation**: README in each package\n8. **Release Strategy**: Use changesets for versioning\n\n## Common Pitfalls\n\n- **Circular Dependencies**: A depends on B, B depends on A\n- **Phantom Dependencies**: Using deps not in package.json\n- **Incorrect Cache Inputs**: Missing files in Turborepo inputs\n- **Over-Sharing**: Sharing code that should be separate\n- **Under-Sharing**: Duplicating code across packages\n- **Large Monorepos**: Without proper tooling, builds slow down\n\n## Publishing Packages\n\n```bash\n# Using Changesets\npnpm add -Dw @changesets\u002Fcli\npnpm changeset init\n\n# Create changeset\npnpm changeset\n\n# Version packages\npnpm changeset version\n\n# Publish\npnpm changeset publish\n```\n\n```yaml\n# .github\u002Fworkflows\u002Frelease.yml\n- name: Create Release Pull Request or Publish\n  uses: changesets\u002Faction@v1\n  with:\n    publish: pnpm release\n  env:\n    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n    NPM_TOKEN: ${{ secrets.NPM_TOKEN }}\n```\n\n## Resources\n\n- **references\u002Fturborepo-guide.md**: Comprehensive Turborepo documentation\n- **references\u002Fnx-guide.md**: Nx monorepo patterns\n- **references\u002Fpnpm-workspaces.md**: pnpm workspace features\n- **assets\u002Fmonorepo-checklist.md**: Setup checklist\n- **assets\u002Fmigration-guide.md**: Multi-repo to monorepo migration\n- **scripts\u002Fdependency-graph.ts**: Visualize package dependencies\n","# Monorepo Management\n\nBuild efficient, scalable monorepos that enable code sharing, consistent tooling, and atomic changes across multiple packages and applications.\n\n## When to Use This Skill\n\n- Setting up new monorepo projects\n- Migrating from multi-repo to monorepo\n- Optimizing build and test performance\n- Managing shared dependencies\n- Implementing code sharing strategies\n- Setting up CI\u002FCD for monorepos\n- Versioning and publishing packages\n- Debugging monorepo-specific issues\n\n## Core Concepts\n\n### 1. Why Monorepos?\n\n**Advantages:**\n- Shared code and dependencies\n- Atomic commits across projects\n- Consistent tooling and standards\n- Easier refactoring\n- Simplified dependency management\n- Better code visibility\n\n**Challenges:**\n- Build performance at scale\n- CI\u002FCD complexity\n- Access control\n- Large Git repository\n\n### 2. Monorepo Tools\n\n**Package Managers:**\n- pnpm workspaces (recommended)\n- npm workspaces\n- Yarn workspaces\n\n**Build Systems:**\n- Turborepo (recommended for most)\n- Nx (feature-rich, complex)\n- Lerna (older, maintenance mode)\n\n## Turborepo Setup\n\n### Initial Setup\n\n```bash\n# Create new monorepo\nnpx create-turbo@latest my-monorepo\ncd my-monorepo\n\n# Structure:\n# apps\u002F\n#   web\u002F          - Next.js app\n#   docs\u002F         - Documentation site\n# packages\u002F\n#   ui\u002F           - Shared UI components\n#   config\u002F       - Shared configurations\n#   tsconfig\u002F     - Shared TypeScript configs\n# turbo.json      - Turborepo configuration\n# package.json    - Root package.json\n```\n\n### Configuration\n\n```json\n\u002F\u002F turbo.json\n{\n  \"$schema\": \"https:\u002F\u002Fturbo.build\u002Fschema.json\",\n  \"globalDependencies\": [\"**\u002F.env.*local\"],\n  \"pipeline\": {\n    \"build\": {\n      \"dependsOn\": [\"^build\"],\n      \"outputs\": [\"dist\u002F**\", \".next\u002F**\", \"!.next\u002Fcache\u002F**\"]\n    },\n    \"test\": {\n      \"dependsOn\": [\"build\"],\n      \"outputs\": [\"coverage\u002F**\"]\n    },\n    \"lint\": {\n      \"outputs\": []\n    },\n    \"dev\": {\n      \"cache\": false,\n      \"persistent\": true\n    },\n    \"type-check\": {\n      \"dependsOn\": [\"^build\"],\n      \"outputs\": []\n    }\n  }\n}\n```\n\n```json\n\u002F\u002F package.json (root)\n{\n  \"name\": \"my-monorepo\",\n  \"private\": true,\n  \"workspaces\": [\n    \"apps\u002F*\",\n    \"packages\u002F*\"\n  ],\n  \"scripts\": {\n    \"build\": \"turbo run build\",\n    \"dev\": \"turbo run dev\",\n    \"test\": \"turbo run test\",\n    \"lint\": \"turbo run lint\",\n    \"format\": \"prettier --write \\\"**\u002F*.{ts,tsx,md}\\\"\",\n    \"clean\": \"turbo run clean && rm -rf node_modules\"\n  },\n  \"devDependencies\": {\n    \"turbo\": \"^1.10.0\",\n    \"prettier\": \"^3.0.0\",\n    \"typescript\": \"^5.0.0\"\n  },\n  \"packageManager\": \"pnpm@8.0.0\"\n}\n```\n\n### Package Structure\n\n```json\n\u002F\u002F packages\u002Fui\u002Fpackage.json\n{\n  \"name\": \"@repo\u002Fui\",\n  \"version\": \"0.0.0\",\n  \"private\": true,\n  \"main\": \".\u002Fdist\u002Findex.js\",\n  \"types\": \".\u002Fdist\u002Findex.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"import\": \".\u002Fdist\u002Findex.js\",\n      \"types\": \".\u002Fdist\u002Findex.d.ts\"\n    },\n    \".\u002Fbutton\": {\n      \"import\": \".\u002Fdist\u002Fbutton.js\",\n      \"types\": \".\u002Fdist\u002Fbutton.d.ts\"\n    }\n  },\n  \"scripts\": {\n    \"build\": \"tsup src\u002Findex.ts --format esm,cjs --dts\",\n    \"dev\": \"tsup src\u002Findex.ts --format esm,cjs --dts --watch\",\n    \"lint\": \"eslint src\u002F\",\n    \"type-check\": \"tsc --noEmit\"\n  },\n  \"devDependencies\": {\n    \"@repo\u002Ftsconfig\": \"workspace:*\",\n    \"tsup\": \"^7.0.0\",\n    \"typescript\": \"^5.0.0\"\n  },\n  \"dependencies\": {\n    \"react\": \"^18.2.0\"\n  }\n}\n```\n\n## pnpm Workspaces\n\n### Setup\n\n```yaml\n# pnpm-workspace.yaml\npackages:\n  - 'apps\u002F*'\n  - 'packages\u002F*'\n  - 'tools\u002F*'\n```\n\n```json\n\u002F\u002F .npmrc\n# Hoist shared dependencies\nshamefully-hoist=true\n\n# Strict peer dependencies\nauto-install-peers=true\nstrict-peer-dependencies=true\n\n# Performance\nstore-dir=~\u002F.pnpm-store\n```\n\n### Dependency Management\n\n```bash\n# Install dependency in specific package\npnpm add react --filter @repo\u002Fui\npnpm add -D typescript --filter @repo\u002Fui\n\n# Install workspace dependency\npnpm add @repo\u002Fui --filter web\n\n# Install in all packages\npnpm add -D eslint -w\n\n# Update all dependencies\npnpm update -r\n\n# Remove dependency\npnpm remove react --filter @repo\u002Fui\n```\n\n### Scripts\n\n```bash\n# Run script in specific package\npnpm --filter web dev\npnpm --filter @repo\u002Fui build\n\n# Run in all packages\npnpm -r build\npnpm -r test\n\n# Run in parallel\npnpm -r --parallel dev\n\n# Filter by pattern\npnpm --filter \"@repo\u002F*\" build\npnpm --filter \"...web\" build  # Build web and dependencies\n```\n\n## Nx Monorepo\n\n### Setup\n\n```bash\n# Create Nx monorepo\nnpx create-nx-workspace@latest my-org\n\n# Generate applications\nnx generate @nx\u002Freact:app my-app\nnx generate @nx\u002Fnext:app my-next-app\n\n# Generate libraries\nnx generate @nx\u002Freact:lib ui-components\nnx generate @nx\u002Fjs:lib utils\n```\n\n### Configuration\n\n```json\n\u002F\u002F nx.json\n{\n  \"extends\": \"nx\u002Fpresets\u002Fnpm.json\",\n  \"$schema\": \".\u002Fnode_modules\u002Fnx\u002Fschemas\u002Fnx-schema.json\",\n  \"targetDefaults\": {\n    \"build\": {\n      \"dependsOn\": [\"^build\"],\n      \"inputs\": [\"production\", \"^production\"],\n      \"cache\": true\n    },\n    \"test\": {\n      \"inputs\": [\"default\", \"^production\", \"{workspaceRoot}\u002Fjest.preset.js\"],\n      \"cache\": true\n    },\n    \"lint\": {\n      \"inputs\": [\"default\", \"{workspaceRoot}\u002F.eslintrc.json\"],\n      \"cache\": true\n    }\n  },\n  \"namedInputs\": {\n    \"default\": [\"{projectRoot}\u002F**\u002F*\", \"sharedGlobals\"],\n    \"production\": [\n      \"default\",\n      \"!{projectRoot}\u002F**\u002F?(*.)+(spec|test).[jt]s?(x)?(.snap)\",\n      \"!{projectRoot}\u002Ftsconfig.spec.json\"\n    ],\n    \"sharedGlobals\": []\n  }\n}\n```\n\n### Running Tasks\n\n```bash\n# Run task for specific project\nnx build my-app\nnx test ui-components\nnx lint utils\n\n# Run for affected projects\nnx affected:build\nnx affected:test --base=main\n\n# Visualize dependencies\nnx graph\n\n# Run in parallel\nnx run-many --target=build --all --parallel=3\n```\n\n## Shared Configurations\n\n### TypeScript Configuration\n\n```json\n\u002F\u002F packages\u002Ftsconfig\u002Fbase.json\n{\n  \"compilerOptions\": {\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"bundler\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"incremental\": true,\n    \"declaration\": true\n  },\n  \"exclude\": [\"node_modules\"]\n}\n\n\u002F\u002F packages\u002Ftsconfig\u002Freact.json\n{\n  \"extends\": \".\u002Fbase.json\",\n  \"compilerOptions\": {\n    \"jsx\": \"react-jsx\",\n    \"lib\": [\"ES2022\", \"DOM\", \"DOM.Iterable\"]\n  }\n}\n\n\u002F\u002F apps\u002Fweb\u002Ftsconfig.json\n{\n  \"extends\": \"@repo\u002Ftsconfig\u002Freact.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"dist\",\n    \"rootDir\": \"src\"\n  },\n  \"include\": [\"src\"],\n  \"exclude\": [\"node_modules\", \"dist\"]\n}\n```\n\n### ESLint Configuration\n\n```javascript\n\u002F\u002F packages\u002Fconfig\u002Feslint-preset.js\nmodule.exports = {\n  extends: [\n    'eslint:recommended',\n    'plugin:@typescript-eslint\u002Frecommended',\n    'plugin:react\u002Frecommended',\n    'plugin:react-hooks\u002Frecommended',\n    'prettier',\n  ],\n  plugins: ['@typescript-eslint', 'react', 'react-hooks'],\n  parser: '@typescript-eslint\u002Fparser',\n  parserOptions: {\n    ecmaVersion: 2022,\n    sourceType: 'module',\n    ecmaFeatures: {\n      jsx: true,\n    },\n  },\n  settings: {\n    react: {\n      version: 'detect',\n    },\n  },\n  rules: {\n    '@typescript-eslint\u002Fno-unused-vars': 'error',\n    'react\u002Freact-in-jsx-scope': 'off',\n  },\n};\n\n\u002F\u002F apps\u002Fweb\u002F.eslintrc.js\nmodule.exports = {\n  extends: ['@repo\u002Fconfig\u002Feslint-preset'],\n  rules: {\n    \u002F\u002F App-specific rules\n  },\n};\n```\n\n## Code Sharing Patterns\n\n### Pattern 1: Shared UI Components\n\n```typescript\n\u002F\u002F packages\u002Fui\u002Fsrc\u002Fbutton.tsx\nimport * as React from 'react';\n\nexport interface ButtonProps {\n  variant?: 'primary' | 'secondary';\n  children: React.ReactNode;\n  onClick?: () => void;\n}\n\nexport function Button({ variant = 'primary', children, onClick }: ButtonProps) {\n  return (\n    \u003Cbutton\n      className={`btn btn-${variant}`}\n      onClick={onClick}\n    >\n      {children}\n    \u003C\u002Fbutton>\n  );\n}\n\n\u002F\u002F packages\u002Fui\u002Fsrc\u002Findex.ts\nexport { Button, type ButtonProps } from '.\u002Fbutton';\nexport { Input, type InputProps } from '.\u002Finput';\n\n\u002F\u002F apps\u002Fweb\u002Fsrc\u002Fapp.tsx\nimport { Button } from '@repo\u002Fui';\n\nexport function App() {\n  return \u003CButton variant=\"primary\">Click me\u003C\u002FButton>;\n}\n```\n\n### Pattern 2: Shared Utilities\n\n```typescript\n\u002F\u002F packages\u002Futils\u002Fsrc\u002Fstring.ts\nexport function capitalize(str: string): string {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nexport function truncate(str: string, length: number): string {\n  return str.length > length ? str.slice(0, length) + '...' : str;\n}\n\n\u002F\u002F packages\u002Futils\u002Fsrc\u002Findex.ts\nexport * from '.\u002Fstring';\nexport * from '.\u002Farray';\nexport * from '.\u002Fdate';\n\n\u002F\u002F Usage in apps\nimport { capitalize, truncate } from '@repo\u002Futils';\n```\n\n### Pattern 3: Shared Types\n\n```typescript\n\u002F\u002F packages\u002Ftypes\u002Fsrc\u002Fuser.ts\nexport interface User {\n  id: string;\n  email: string;\n  name: string;\n  role: 'admin' | 'user';\n}\n\nexport interface CreateUserInput {\n  email: string;\n  name: string;\n  password: string;\n}\n\n\u002F\u002F Used in both frontend and backend\nimport type { User, CreateUserInput } from '@repo\u002Ftypes';\n```\n\n## Build Optimization\n\n### Turborepo Caching\n\n```json\n\u002F\u002F turbo.json\n{\n  \"pipeline\": {\n    \"build\": {\n      \u002F\u002F Build depends on dependencies being built first\n      \"dependsOn\": [\"^build\"],\n\n      \u002F\u002F Cache these outputs\n      \"outputs\": [\"dist\u002F**\", \".next\u002F**\"],\n\n      \u002F\u002F Cache based on these inputs (default: all files)\n      \"inputs\": [\"src\u002F**\u002F*.tsx\", \"src\u002F**\u002F*.ts\", \"package.json\"]\n    },\n    \"test\": {\n      \u002F\u002F Run tests in parallel, don't depend on build\n      \"cache\": true,\n      \"outputs\": [\"coverage\u002F**\"]\n    }\n  }\n}\n```\n\n### Remote Caching\n\n```bash\n# Turborepo Remote Cache (Vercel)\nnpx turbo login\nnpx turbo link\n\n# Custom remote cache\n# turbo.json\n{\n  \"remoteCache\": {\n    \"signature\": true,\n    \"enabled\": true\n  }\n}\n```\n\n## CI\u002FCD for Monorepos\n\n### GitHub Actions\n\n```yaml\n# .github\u002Fworkflows\u002Fci.yml\nname: CI\n\non:\n  push:\n    branches: [main]\n  pull_request:\n    branches: [main]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions\u002Fcheckout@v3\n        with:\n          fetch-depth: 0  # For Nx affected commands\n\n      - uses: pnpm\u002Faction-setup@v2\n        with:\n          version: 8\n\n      - uses: actions\u002Fsetup-node@v3\n        with:\n          node-version: 18\n          cache: 'pnpm'\n\n      - name: Install dependencies\n        run: pnpm install --frozen-lockfile\n\n      - name: Build\n        run: pnpm turbo run build\n\n      - name: Test\n        run: pnpm turbo run test\n\n      - name: Lint\n        run: pnpm turbo run lint\n\n      - name: Type check\n        run: pnpm turbo run type-check\n```\n\n### Deploy Affected Only\n\n```yaml\n# Deploy only changed apps\n- name: Deploy affected apps\n  run: |\n    if pnpm nx affected:apps --base=origin\u002Fmain --head=HEAD | grep -q \"web\"; then\n      echo \"Deploying web app\"\n      pnpm --filter web deploy\n    fi\n```\n\n## Best Practices\n\n1. **Consistent Versioning**: Lock dependency versions across workspace\n2. **Shared Configs**: Centralize ESLint, TypeScript, Prettier configs\n3. **Dependency Graph**: Keep it acyclic, avoid circular dependencies\n4. **Cache Effectively**: Configure inputs\u002Foutputs correctly\n5. **Type Safety**: Share types between frontend\u002Fbackend\n6. **Testing Strategy**: Unit tests in packages, E2E in apps\n7. **Documentation**: README in each package\n8. **Release Strategy**: Use changesets for versioning\n\n## Common Pitfalls\n\n- **Circular Dependencies**: A depends on B, B depends on A\n- **Phantom Dependencies**: Using deps not in package.json\n- **Incorrect Cache Inputs**: Missing files in Turborepo inputs\n- **Over-Sharing**: Sharing code that should be separate\n- **Under-Sharing**: Duplicating code across packages\n- **Large Monorepos**: Without proper tooling, builds slow down\n\n## Publishing Packages\n\n```bash\n# Using Changesets\npnpm add -Dw @changesets\u002Fcli\npnpm changeset init\n\n# Create changeset\npnpm changeset\n\n# Version packages\npnpm changeset version\n\n# Publish\npnpm changeset publish\n```\n\n```yaml\n# .github\u002Fworkflows\u002Frelease.yml\n- name: Create Release Pull Request or Publish\n  uses: changesets\u002Faction@v1\n  with:\n    publish: pnpm release\n  env:\n    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n    NPM_TOKEN: ${{ secrets.NPM_TOKEN }}\n```\n\n## Resources\n\n- **references\u002Fturborepo-guide.md**: Comprehensive Turborepo documentation\n- **references\u002Fnx-guide.md**: Nx monorepo patterns\n- **references\u002Fpnpm-workspaces.md**: pnpm workspace features\n- **assets\u002Fmonorepo-checklist.md**: Setup checklist\n- **assets\u002Fmigration-guide.md**: Multi-repo to monorepo migration\n- **scripts\u002Fdependency-graph.ts**: Visualize package dependencies\n",{"name":5,"description":7},"main","18d0e63d1313ca87098f614aa7c1e2dcf6de79c7","backend\u002Fskills\u002Fmarketplace\u002Fcodebuddy-plugins-official\u002Fexternal_plugins\u002Fdeveloper-essentials\u002Fskills\u002Fmonorepo-management",1,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system","https:\u002F\u002Fgithub.com\u002Fwelflau","2026-11-10 11:14:25",{"source":8,"skillName":5,"commands":58,"prompt":67,"zipAvailable":68},[59,62,65],{"tool":60,"command":61},"npx","npx skills add welflau\u002Fai-dev-system --skill monorepo-management",{"tool":63,"command":64},"bunx","bunx skills add welflau\u002Fai-dev-system --skill monorepo-management",{"tool":34,"command":66},"pnpm dlx skills add welflau\u002Fai-dev-system --skill monorepo-management","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fskills\u002Fmarketplace\u002Fcodebuddy-plugins-official\u002Fexternal_plugins\u002Fdeveloper-essentials\u002Fskills\u002Fmonorepo-management\u002FSKILL.md",true,[],[71,102,132,157,183,207],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":75,"licenseFileUrl":76,"sourceHtmlUrl":77,"categories":78,"keywords":82,"publishedAt":45},"01M6HSTDP4M3JFXEBK91VFB4PA","web-artifacts-builder","Suite of tools for creating elaborate, multi-component claude.ai HTML artifacts using modern frontend web technologies (React, Tailwind CSS, shadcn\u002Fui). Use for complex artifacts requiring state management, routing, or shadcn\u002Fui components - not for simple single-file HTML\u002FJSX artifacts.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fskills\u002Fmarketplace\u002Fcodebuddy-plugins-official\u002Fplugins\u002Fweb-artifacts-builder\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fskills\u002Fmarketplace\u002Fcodebuddy-plugins-official\u002Fplugins\u002Fweb-artifacts-builder\u002FSKILL.md",[79],{"categoryNo":80,"categoryName":81,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000009","前端开发",[83,84,85,86,87,88,89,90,91,92,93,94,95,96,42,97,98,99,33,100,101],"web artifacts builder","web","artifacts","artifacts builder","builder","frontend","css","components","react","routing","state management","state","file","Tailwind","single-file","simple","ui components","for","single",{"skillNo":103,"name":104,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":75,"licenseFileUrl":106,"sourceHtmlUrl":107,"categories":108,"keywords":118,"publishedAt":45},"01M6HSDXH0JSP8R3QTNY9XZ8HN","frontend-design","Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications (examples include websites, landing pages, dashboards, React components, HTML\u002FCSS layouts, or when styling\u002Fbeautifying any web UI). Generates creative, polished code and UI design that avoids generic AI aesthetics.","https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fskills\u002Fmarketplace\u002Fcodebuddy-plugins-official\u002Fplugins\u002Ffrontend-design\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fskills\u002Fmarketplace\u002Fcodebuddy-plugins-official\u002Fplugins\u002Ffrontend-design\u002FSKILL.md",[109,110,113],{"categoryNo":80,"categoryName":81,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":111,"categoryName":112,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":114,"categoryName":115,"taxonomyType":116,"taxonomyTypeDesc":117},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[88,119,120,89,84,90,91,121,122,123,85,124,125,126,42,127,128,129,130,30,131,28],"design","frontend design","react components","create","code","examples","applications","landing","ui design","pages","aesthetics","web ui","generic",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":75,"licenseFileUrl":136,"sourceHtmlUrl":137,"categories":138,"keywords":140,"publishedAt":45},"01M6HSA77QYVP7A72HREGTDN2C","algorithmic-art","Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.","https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fskills\u002Fmarketplace\u002Fcodebuddy-plugins-official\u002Fplugins\u002Falgorithmic-art\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fskills\u002Fmarketplace\u002Fcodebuddy-plugins-official\u002Fplugins\u002Falgorithmic-art\u002FSKILL.md",[139],{"categoryNo":111,"categoryName":112,"taxonomyType":20,"taxonomyTypeDesc":21},[141,142,143,122,123,144,145,146,147,42,148,149,150,151,30,152,153,154,155,156,28],"algorithmic art","Art","algorithmic","flow","js","work","interactive","generative art","exploration","systems","users","Existing","request","generative","copyright","fields",{"skillNo":158,"name":159,"nameZh":6,"description":160,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":75,"licenseFileUrl":161,"sourceHtmlUrl":162,"categories":163,"keywords":165,"publishedAt":45},"01M6HS9HE0X390Y6RQKTY1YNGJ","theme-factory","Toolkit for styling artifacts with a theme. These artifacts can be slides, docs, reportings, HTML landing pages, etc. There are 10 pre-set themes with colors\u002Ffonts that you can apply to any artifact that has been creating, or can generate a new theme on-the-fly.","https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fskills\u002Fmarketplace\u002Fcodebuddy-plugins-official\u002Fexternal_plugins\u002Ftheme-factory\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fskills\u002Fmarketplace\u002Fcodebuddy-plugins-official\u002Fexternal_plugins\u002Ftheme-factory\u002FSKILL.md",[164],{"categoryNo":111,"categoryName":112,"taxonomyType":20,"taxonomyTypeDesc":21},[166,167,168,169,170,171,85,172,173,174,126,175,176,128,177,30,178,179,180,100,181,182],"theme factory","factory","theme","docs","toolkit","generate","SET","fly","slides","styling","artifact","themes","you","fonts","can","apply","new",{"skillNo":184,"name":185,"nameZh":6,"description":186,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":187,"categories":188,"keywords":192,"publishedAt":45},"01M6HS74GASM6FJ77F83EY679E","browsing","Use when you need direct browser control - teaches Chrome DevTools Protocol for controlling existing browser sessions, multi-tab management, form automation, and content extraction via use_browser MCP tool","https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fskills\u002Fmarketplace\u002Fcodebuddy-plugins-official\u002Fexternal_plugins\u002Fsuperpowers-chrome\u002Fskills\u002Fbrowsing\u002FSKILL.md",[189],{"categoryNo":190,"categoryName":191,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[185,193,194,195,196,197,198,199,200,201,202,42,203,204,205,206,33,178,100,152],"MCP","automation","chrome","sessions","protocol","browser","devtools","chrome devtools","tool","direct","browser control","control","via","form",{"skillNo":208,"name":209,"nameZh":6,"description":210,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":75,"licenseFileUrl":211,"sourceHtmlUrl":212,"categories":213,"keywords":220,"publishedAt":45},"01M6HS6BZT2CKDNQ6YF20DXN4T","slack-gif-creator","Knowledge and utilities for creating animated GIFs optimized for Slack. Provides constraints, validation tools, and animation concepts. Use when users request animated GIFs for Slack like \"make me a GIF of X doing Y for Slack.\"","https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fskills\u002Fmarketplace\u002Fcodebuddy-plugins-official\u002Fexternal_plugins\u002Fslack-gif-creator\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fskills\u002Fmarketplace\u002Fcodebuddy-plugins-official\u002Fexternal_plugins\u002Fslack-gif-creator\u002FSKILL.md",[214,217],{"categoryNo":215,"categoryName":216,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000005","邮件与沟通",{"categoryNo":218,"categoryName":219,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000016","图像与多媒体",[221,222,223,224,225,226,227,228,229,42,230,151,231,232,233,100,153,28],"slack gif creator","slack","gif","creator","validation","Tools","constraints","Animation","knowledge","me","make","Utilities","concepts"]