Claude-skill-registry creating-modules

Creates new modules within existing packages following project conventions. Handles file structure, barrel exports, namespace files, package.json imports/exports, and internal import patterns.

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/creating-modules" ~/.claude/skills/majiayu000-claude-skill-registry-creating-modules && rm -rf "$T"
manifest: skills/data/creating-modules/SKILL.md
source content

Creating Modules

Steps

  1. Create module directory:

    packages/<pkg>/src/<module-name>/

  2. Create implementation files:

    <module-name>.ts
    or split across multiple files

  3. Create barrel file

    __.ts
    :

    export * from './implementation.js'
    export type * from './types.js'
    
  4. Create namespace file

    _.ts
    :

    export * as ModuleName from './__.js'
    
  5. Add to package.json imports:

    {
      "imports": {
        "#module-name": "./build/module-name/_.js",
        "#module-name/*": "./build/module-name/*.js"
      }
    }
    
  6. Add to package.json exports:

    {
      "exports": {
        "./module-name": "./build/module-name/__.js"
      }
    }
    
  7. Sync tsconfig paths (run

    syncing-tsconfig-paths
    skill script)

  8. Add to main exports in

    src/index.ts
    :

    export * from '#module-name'
    

Reference

Module Structure

src/module-name/
├── _.ts              # Namespace file - exports the namespace
├── _.test.ts         # Module tests
├── __.ts             # Barrel file - exports all functions/types
└── *.ts              # Implementation files

Import System

Use

#
imports for internal module references within a package:

// Correct - use # imports
import { Fn } from '#fn'
import { Obj } from '#obj'

// Incorrect - don't use relative or package imports internally
import { Fn } from '../fn/_.js'
import { Obj } from '@kitz/core/obj'

Naming

  • Directory: kebab-case (
    group-by/
    )
  • Namespace export: PascalCase (
    GroupBy
    )
  • Functions: camelCase, no namespace prefix (
    by
    , not
    groupBy
    )

Notes

  • Each package defines its own
    #
    imports in package.json
  • Cross-package
    #
    imports are not valid - use package name imports