CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-resolve

Resolve like require.resolve() on behalf of files asynchronously and synchronously

Pending
Overview
Eval results
Files

core-modules.mddocs/

Core Module Detection

Utilities for detecting and working with Node.js core modules during module resolution. These functions help determine whether a given module name refers to a built-in Node.js module like 'fs', 'path', or 'http'.

Capabilities

Is Core Function

Determines whether a given module name is a Node.js core module.

/**
 * Check if a module name is a Node.js core module
 * @param {string} moduleName - Module name to check
 * @returns {boolean} True if the module is a Node.js core module
 */
function isCore(moduleName);

Usage Examples:

const resolve = require('resolve');

// Check common core modules
console.log(resolve.isCore('fs'));        // true
console.log(resolve.isCore('path'));      // true
console.log(resolve.isCore('http'));      // true
console.log(resolve.isCore('crypto'));    // true

// Check non-core modules
console.log(resolve.isCore('lodash'));    // false
console.log(resolve.isCore('express'));   // false
console.log(resolve.isCore('./local'));   // false

// Check edge cases
console.log(resolve.isCore('node:fs'));   // true (Node.js protocol prefix)
console.log(resolve.isCore(''));          // false

Core Module Map

Object containing a mapping of all core module names to boolean values indicating whether they are core modules.

/**
 * Object mapping core module names to boolean values
 * Keys are module names, values are always true for core modules
 * @type {object}
 */
const core;

Usage Examples:

const resolve = require('resolve');

// Access the core modules object
console.log(resolve.core);
// {
//   fs: true,
//   path: true,
//   http: true,
//   https: true,
//   crypto: true,
//   ...
// }

// Check specific modules
if (resolve.core.fs) {
  console.log('fs is a core module');
}

// Get all core module names
const coreModuleNames = Object.keys(resolve.core);
console.log('Core modules:', coreModuleNames);

// Filter user dependencies vs core modules
const userDependencies = ['lodash', 'fs', 'express', 'path']
  .filter(name => !resolve.core[name]);
console.log('User dependencies:', userDependencies); // ['lodash', 'express']

Integration with Resolution

Core module detection is automatically integrated into the main resolution functions and can be controlled via options.

Include Core Modules Option

interface CoreModuleOptions {
  /** Include Node.js core modules in search (default: true) */
  includeCoreModules?: boolean;
}

Usage Examples:

const resolve = require('resolve');

// Default behavior - core modules are resolved
resolve('fs', { basedir: __dirname }, (err, res) => {
  console.log(res); // 'fs' (core module name returned as-is)
});

// Exclude core modules from resolution
resolve('fs', { 
  basedir: __dirname, 
  includeCoreModules: false 
}, (err, res) => {
  // Will attempt to find 'fs' as a regular module in node_modules
  // Likely to result in MODULE_NOT_FOUND error
});

// Sync version
try {
  const res = resolve.sync('path', { 
    basedir: __dirname,
    includeCoreModules: true 
  });
  console.log(res); // 'path'
} catch (err) {
  console.error(err);
}

Core Module List

The resolve package includes detection for all Node.js core modules across different Node.js versions. Some examples include:

Always Available Core Modules

  • fs - File system operations
  • path - Path utilities
  • http - HTTP client/server
  • https - HTTPS client/server
  • crypto - Cryptographic functionality
  • events - Event emitter
  • stream - Streaming interfaces
  • buffer - Binary data handling
  • util - Utility functions
  • os - Operating system utilities

Version-Specific Core Modules

Some core modules were added in specific Node.js versions:

  • worker_threads - Available in Node.js 10.5.0+
  • fs/promises - Available in Node.js 10.0.0+
  • perf_hooks - Available in Node.js 8.5.0+

Node.js Protocol Prefix

Core modules can also be imported with the node: protocol prefix:

const resolve = require('resolve');

// Both forms are recognized as core modules
console.log(resolve.isCore('fs'));      // true
console.log(resolve.isCore('node:fs')); // true

resolve('node:fs', { basedir: __dirname }, (err, res) => {
  console.log(res); // 'node:fs'
});

Implementation Details

The core module detection uses the is-core-module package internally, which maintains an up-to-date list of Node.js core modules across different versions. This ensures accurate detection regardless of the Node.js version being used.

The core module map (resolve.core) is generated from the same data and provides O(1) lookup performance for core module checking in performance-critical scenarios.

Install with Tessl CLI

npx tessl i tessl/npm-resolve

docs

async-resolution.md

cli.md

core-modules.md

index.md

sync-resolution.md

tile.json