Marketplace

ecosystem

JavaScript ecosystem including npm, build tools (Webpack, Vite), testing (Jest, Vitest), linting, and CI/CD integration.

$ Instalar

git clone https://github.com/pluginagentmarketplace/custom-plugin-javascript /tmp/custom-plugin-javascript && cp -r /tmp/custom-plugin-javascript/skills/ecosystem ~/.claude/skills/custom-plugin-javascript

// tip: Run this command in your terminal to install the skill


name: ecosystem description: JavaScript ecosystem including npm, build tools (Webpack, Vite), testing (Jest, Vitest), linting, and CI/CD integration. sasmp_version: "1.3.0" bonded_agent: 07-javascript-ecosystem bond_type: PRIMARY_BOND

Production-Grade Configuration

skill_type: reference response_format: code_first max_tokens: 1500

parameter_validation: required: [topic] optional: [tool_type]

retry_logic: on_ambiguity: ask_clarification fallback: show_npm_basics

observability: entry_log: "Ecosystem skill activated" exit_log: "Ecosystem reference provided"

JavaScript Ecosystem Skill

Quick Reference Card

npm Commands

npm init -y                  # Initialize
npm install pkg              # Add dependency
npm install -D pkg           # Dev dependency
npm install -g pkg           # Global
npm update                   # Update all
npm audit fix                # Fix vulnerabilities
npm run script               # Run script

package.json

{
  "name": "project",
  "version": "1.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "test": "vitest",
    "lint": "eslint src"
  },
  "dependencies": {},
  "devDependencies": {}
}

Vite Config (Recommended)

// vite.config.js
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';

export default defineConfig({
  plugins: [react()],
  server: { port: 3000 },
  build: { sourcemap: true }
});

Vitest Testing

import { describe, it, expect, vi } from 'vitest';

describe('Calculator', () => {
  it('adds numbers', () => {
    expect(add(2, 3)).toBe(5);
  });

  it('mocks function', () => {
    const mock = vi.fn().mockReturnValue(42);
    expect(mock()).toBe(42);
  });
});

ESLint Config

// .eslintrc.cjs
module.exports = {
  env: { browser: true, es2022: true },
  extends: ['eslint:recommended'],
  rules: {
    'no-console': 'warn',
    'no-unused-vars': 'error'
  }
};

Prettier Config

{
  "semi": true,
  "singleQuote": true,
  "trailingComma": "es5"
}

GitHub Actions CI

name: CI
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: '20' }
      - run: npm ci
      - run: npm test
      - run: npm run build

Troubleshooting

Common Issues

ProblemSymptomFix
Module not foundImport errorCheck node_modules
Build failsCompilation errorCheck config
Test failsAssertion errorCheck test setup
Lint errorsCode warningsRun --fix

Debug Checklist

# 1. Clear caches
rm -rf node_modules package-lock.json
npm cache clean --force
npm install

# 2. Check versions
node --version
npm --version
npm ls <package>

# 3. Verbose output
npm run build --verbose

Production Patterns

Environment Variables

// .env
VITE_API_URL=https://api.example.com

// Usage
const url = import.meta.env.VITE_API_URL;

Code Splitting

// Dynamic import
const Component = React.lazy(() => import('./Component'));

// With Suspense
<Suspense fallback={<Loading />}>
  <Component />
</Suspense>

Related

  • Agent 07: JavaScript Ecosystem (detailed learning)
  • Skill: testing: Test frameworks
  • Skill: modern-javascript: ES modules