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.
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
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 |
- Node.js (recommended: latest LTS version)
- npm
- Global access to install packages (for
npm link)
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.shThis script will:
- Test each generator with multiple
yoCLI versions (4.3.1, 5.1.0, 6.0.0) - Automatically link/unlink generators
- Display colored output showing success/failure status
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-mjsYou 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-mjsWhen a generator runs successfully, you should see:
- Console output: "Hello from CJS generator!" or "Hello from ESM generator!"
- Exit code: 0
- 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-depsflag
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");
}
};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");
}
}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 | ❌ | ✅ | ✅ |
✅ 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
- 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
-
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
- Error:
-
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
- Error:
- 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