Claude-skill-registry component-library
Conditionally installs GitHub Packages component library at latest version. Adds to package.json when user requests it.
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/component-library" ~/.claude/skills/majiayu000-claude-skill-registry-component-library && rm -rf "$T"
manifest:
skills/data/component-library/SKILL.mdsource content
Component Library Installation Skill
Purpose
Add and configure the component library dependency in package.json when user requests it.
Execution Context: This skill runs as a separate step (Phase 1, Step 4) after package.json is generated.
⚠️ CONDITIONAL SKILL - READ CAREFULLY
Execute this skill ONLY if:
include_component_library: yes
If
:include_component_library: no
- SKIP this skill entirely
- Move to next skill
Input Parameters
From configuration:
- Boolean flag (include_component_library
oryes
)no
- Name of the component library package (default:component_library
)@RoyalAholdDelhaize/pdl-spectrum-component-library-web
- Always fetch latest version from npm registrycomponent_library_version
Package.json Format
Important: The component library uses an npm alias format in package.json:
{ "dependencies": { "@royalaholddelhaize/pdl-spectrum-component-library-web": "npm:@RoyalAholdDelhaize/pdl-spectrum-component-library-web@^{version}" } }
Why the alias?
- Key (lowercase):
- npm convention for lowercase scopes@royalaholddelhaize/pdl-spectrum-component-library-web - Value (original case):
- actual package namenpm:@RoyalAholdDelhaize/pdl-spectrum-component-library-web@^{version}
Manual installation command:
npm install @RoyalAholdDelhaize/pdl-spectrum-component-library-web
npm automatically creates the alias format in package.json.
Key Rule
Component library dependency is added to package.json when:
include_component_library: yes
If fetching latest version fails:
- Skip installation
- Inform user that GitHub token is missing
- Provide setup instructions
- Continue with project generation
Implementation Steps
⚠️ CRITICAL: Component library packages use
npm show, NOT npm view
- Reason: GitHub Packages authentication works best with
npm show - All other packages use
(see package-json skill)npm view
Step 1: Conditional Check
// ONLY execute if user requested component library if (userConfig.include_component_library !== 'yes') { console.log('⏭️ Skipping component library - not requested'); return; // Exit this skill }
Step 2: Read Existing package.json
const fs = require('fs'); const path = require('path'); // Read the generated package.json const packageJsonPath = path.join(process.cwd(), 'package.json'); const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
Step 3: Fetch Latest Version and Add to Dependencies
if (userConfig.include_component_library === 'yes') { const { execSync } = require('child_process'); try { // Fetch latest version from npm registry // IMPORTANT: Component library packages MUST use 'npm show', not 'npm view' // This is the standard for GitHub Packages authentication // Note: Uses npm show without --registry flag to respect ~/.npmrc authentication const latestVersion = execSync( 'npm show @RoyalAholdDelhaize/pdl-spectrum-component-library-web version', { encoding: 'utf-8' } ).trim(); userConfig.component_library_version = `^${latestVersion}`; // Add to dependencies using npm alias format // Key: lowercase scope (npm convention) // Value: npm:{original case package}@{version} const aliasKey = '@royalaholddelhaize/pdl-spectrum-component-library-web'; const aliasValue = `npm:@RoyalAholdDelhaize/pdl-spectrum-component-library-web@${userConfig.component_library_version}`; // Add to package.json dependencies packageJson.dependencies[aliasKey] = aliasValue; // Write updated package.json fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n'); console.log(`✓ Component library configured: ${aliasKey} → ${aliasValue}`); } catch (error) { // If fetching version fails, inform user and skip installation console.log('\n⚠️ GitHub token is missing. Skipping component library installation.'); console.log('📖 To install the component library later, configure a GitHub token:'); console.log(' https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-npm-registry#authenticating-with-a-personal-access-token\n'); // Skip installation - do not add to dependencies userConfig.include_component_library = 'no'; return; } }
Validation Checklist
- Verify
flag checked before executioninclude_component_library - Verify latest version fetched successfully before adding to package.json
- Verify user informed with setup instructions if fetch fails
- Verify component library added to package.json only when fetch succeeds