Handles the lifecycle and bootstrapping of generators in a specific environment
Module and package discovery utilities for finding generators in npm packages and file systems.
Search for modules and packages synchronously using patterns and search paths.
/**
* Search for npm packages synchronously using glob patterns
* @param patterns - Glob patterns to search for (string or array)
* @param options - Lookup configuration options
* @returns Single result or array of found package paths
*/
function moduleLookupSync(patterns: string | string[], options?: {
/** Return package.json instead of main entry point */
packageJson?: boolean;
/** Return single result instead of array */
singleResult?: boolean;
/** Custom lookup paths to search */
lookups?: string[];
/** Specific npm paths to search */
npmPaths?: string | string[];
}): string | string[];Usage Examples:
import { moduleLookupSync } from "yeoman-environment";
// Find all generator packages
const generators = moduleLookupSync("generator-*");
console.log("Found generators:", generators);
// Find specific generator with package.json
const webapp = moduleLookupSync("generator-webapp", {
packageJson: true,
singleResult: true
});
// Search in custom paths
const custom = moduleLookupSync("generator-*", {
lookups: ["/custom/path/node_modules"],
npmPaths: ["/usr/local/lib/node_modules"]
});Find packages in specific search paths with pattern matching.
/**
* Find packages matching patterns in given search paths
* @param patterns - Glob patterns to match against
* @param searchPaths - Array of paths to search in
* @returns Array of found package paths
*/
function findPackagesIn(
patterns: string | string[],
searchPaths: string[]
): string[];Usage Examples:
import { findPackagesIn } from "yeoman-environment";
// Find generators in specific directories
const paths = [
"/usr/local/lib/node_modules",
"./node_modules",
"~/.npm-global/lib/node_modules"
];
const packages = findPackagesIn("generator-*", paths);
console.log("Found packages:", packages);
// Find multiple patterns
const allPackages = findPackagesIn([
"generator-*",
"@*/generator-*",
"yeoman-generator"
], paths);Get npm-related lookup directories for package discovery.
/**
* Get npm lookup directories including global and local paths
* @param paths - Additional paths to include (optional)
* @returns Array of npm-related search paths
*/
function getNpmPaths(paths?: string | string[]): string[];Usage Examples:
import { getNpmPaths } from "yeoman-environment";
// Get standard npm paths
const npmPaths = getNpmPaths();
console.log("NPM search paths:", npmPaths);
// Typical output: [
// "/usr/local/lib/node_modules",
// "/home/user/.npm-global/lib/node_modules",
// "./node_modules"
// ]
// Include custom paths
const customPaths = getNpmPaths([
"/custom/node_modules",
"/another/path/node_modules"
]);These module lookup functions are used internally by the Environment system for generator discovery, but can also be used directly for custom discovery logic.
import { createEnv, moduleLookupSync, findPackagesIn } from "yeoman-environment";
const env = createEnv();
// Manual discovery before environment lookup
const manualGenerators = moduleLookupSync("generator-*");
console.log("Available generators:", manualGenerators);
// Register discovered generators
for (const generatorPath of manualGenerators) {
try {
env.register(generatorPath);
} catch (error) {
console.warn(`Failed to register ${generatorPath}:`, error.message);
}
}
// Now use environment lookup for automatic discovery
await env.lookup();interface ModuleLookupOptions {
/** Return package.json instead of main entry point */
packageJson?: boolean;
/** Return single result instead of array */
singleResult?: boolean;
/** Custom lookup paths to search */
lookups?: string[];
/** Specific npm paths to search */
npmPaths?: string | string[];
/** File patterns to match */
filePatterns?: string | string[];
/** Package patterns to match */
packagePatterns?: string | string[];
}Install with Tessl CLI
npx tessl i tessl/npm-yeoman-environment