Skip to content

vbangelov/yeoman-compat-testing

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Yeoman Compatibility Testing

This project contains a comprehensive test suite for testing Yeoman generator compatibility across different versions of yeoman-generator and yo CLI, with both CommonJS (CJS) and ES Modules (ESM/MJS) implementations.

Project Structure

yeoman-compat-testing/
├── generators/          # Test generators
│   ├── generator-gen5-cjs/    # CommonJS generator using yeoman-generator v5
│   ├── generator-gen5-mjs/    # ESM generator using yeoman-generator v5
│   ├── generator-gen6-cjs/    # CommonJS generator using yeoman-generator v6
│   ├── generator-gen6-mjs/    # ESM generator using yeoman-generator v6
│   ├── generator-gen7-cjs/    # CommonJS generator using yeoman-generator v7
│   └── generator-gen7-mjs/    # ESM generator using yeoman-generator v7
├── scenarios/          # Test scenario documentation
├── scripts/           # Automation scripts
│   ├── yeoman-scaffold.sh    # Script to generate all test generators
│   └── yeoman-test.sh        # Script to run all compatibility tests
└── README.md          # This file

Generators Overview

Each generator tests a specific combination of:

  • Module System: CommonJS (CJS) vs ES Modules (MJS)
  • yeoman-generator Version: v5, v6, or v7
Generator Module System yeoman-generator Version Output File
generator-gen5-cjs CommonJS ^5.0.0 cjs-output.txt
generator-gen5-mjs ES Modules ^5.0.0 esm-output.txt
generator-gen6-cjs CommonJS ^6.0.0 cjs-output.txt
generator-gen6-mjs ES Modules ^6.0.0 esm-output.txt
generator-gen7-cjs CommonJS ^7.0.0 cjs-output.txt
generator-gen7-mjs ES Modules ^7.0.0 esm-output.txt

Prerequisites

  • Node.js (recommended: latest LTS version)
  • npm
  • Global access to install packages (for npm link)

Quick Start

Option 1: Run All Tests Automatically

Use the provided test script to run all compatibility tests:

# Make sure you're in the project root
cd /path/to/yeoman-compat-testing

# Run all compatibility tests
./scripts/yeoman-test.sh

This script will:

  • Test each generator with multiple yo CLI versions (4.3.1, 5.1.0, 6.0.0)
  • Automatically link/unlink generators
  • Display colored output showing success/failure status

Option 2: Run Individual Generators

To test a specific generator manually:

# 1. Navigate to the generator directory
cd generators/generator-gen7-mjs

# 2. Install dependencies
npm install --legacy-peer-deps

# 3. Link the generator globally
npm link

# 4. Run the generator with a specific yo version
npx -y -p yo@6.0.0 -- yo generator-gen7-mjs

# 5. Clean up - unlink the generator
npm unlink -g generator-gen7-mjs

Option 3: Test Against Different yo Versions

You can test any generator against different yo CLI versions:

# Test with yo v4.3.1
npx -y -p yo@4.3.1 -- yo generator-gen7-mjs

# Test with yo v5.1.0
npx -y -p yo@5.1.0 -- yo generator-gen7-mjs

# Test with yo v6.0.0
npx -y -p yo@6.0.0 -- yo generator-gen7-mjs

Understanding the Test Results

Successful Run

When a generator runs successfully, you should see:

  • Console output: "Hello from CJS generator!" or "Hello from ESM generator!"
  • Exit code: 0

Common Issues

  • Module resolution errors: Often indicate compatibility issues between yeoman-generator versions and yo CLI versions
  • Import/export errors: May indicate ES Module compatibility problems
  • Dependency conflicts: Resolved by using --legacy-peer-deps flag

Generator Implementation Details

CommonJS Generators (CJS)

const Generator = require('yeoman-generator');

module.exports = class extends Generator {
  writing() {
    this.log("Hello from CJS generator!");
    this.fs.write(this.destinationPath("cjs-output.txt"), "Generated by CJS");
  }
};

ES Module Generators (MJS)

import Generator from 'yeoman-generator';

export default class extends Generator {
  writing() {
    this.log("Hello from ESM generator!");
    this.fs.write(this.destinationPath("esm-output.txt"), "Generated by ESM");
  }
}

Compatibility Matrix

Based on actual test results, here are the compatibility outcomes:

Generator Version yo v4.3.1 yo v5.1.0 yo v6.0.0
gen5-cjs
gen5-mjs
gen6-cjs
gen6-mjs
gen7-cjs
gen7-mjs

Key Findings

✅ Fully Compatible:

  • gen5-cjs & gen5-mjs: yeoman-generator v5 works perfectly with all yo CLI versions
  • gen6-mjs: yeoman-generator v6 ESM works with all yo CLI versions

⚠️ Partially Compatible:

  • gen7-mjs: yeoman-generator v7 ESM only works with yo v5.1.0+ (requires yeoman-environment 4.0.0+)

❌ Incompatible:

  • gen6-cjs & gen7-cjs: CommonJS generators fail with yeoman-generator v6+ due to module resolution issues

Error Analysis

  1. gen6-cjs & gen7-cjs failures:

    • Error: Class extends value [object Module] is not a constructor or null
    • Cause: Module resolution conflicts between CommonJS and newer yeoman-generator versions
  2. gen7-mjs with yo@4.3.1 failure:

    • Error: This generator requires yeoman-environment at least 4.0.0-rc.0, current version is 3.19.3
    • Cause: yeoman-generator v7 requires newer yeoman-environment than what yo@4.3.1 provides

Recommendations

  • For maximum compatibility: Use yeoman-generator v5 with either CommonJS or ES Modules
  • For ES Modules: yeoman-generator v6+ works well, but avoid CommonJS with these versions
  • For latest features: Use yeoman-generator v7 with yo v5.1.0+ and ES Modules only

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors