RequireJS

2.3.8 · maintenance · verified Sun Apr 19

RequireJS is a foundational JavaScript file and module loader, primarily designed for asynchronous module definition (AMD) in web browsers, which was crucial for managing dependencies and organizing code before native ES Modules (ESM) were widely adopted. The `requirejs` npm package provides a Node.js adapter, `r.js`, which serves as both an AMD runtime for server-side execution and a powerful optimizer for bundling and minifying browser-side AMD modules. Its current stable version is 2.3.8, last published in November 2025. While it has received infrequent updates for critical fixes (e.g., a prototype pollution vulnerability fix in 2.3.7), its lead maintainer has indicated it's in "end of life mode" for new feature development. RequireJS differentiates itself by offering a consistent module format across browser and Node environments, simplifying build processes for complex web applications. However, its relevance has significantly diminished with the pervasive support for ES Modules in modern JavaScript ecosystems, which offer more efficient loading and static analysis capabilities without needing a separate loader or optimizer in many scenarios.

Common errors

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to use the `requirejs` npm package in Node.js to load a simple AMD module and programmatically run the `r.js` optimizer to bundle modules.

const requirejs = require('requirejs');
const path = require('path');
const fs = require('fs');

// 1. Define sample AMD modules
fs.writeFileSync('dep.js', `define(function() { return { value: 'I am a dependency!' }; });`);
fs.writeFileSync('main.js', `define(['./dep'], function(dep) { return { message: 'Hello from main! Dep says: ' + dep.value }; });`);

// 2. Configure requirejs for Node.js to load AMD modules
requirejs.config({
  baseUrl: __dirname, // Current directory as base for AMD modules
  nodeRequire: require // Pass Node's require to enable fallback for non-AMD modules
});

// 3. Load an AMD module using the configured requirejs instance
requirejs(['main'], function(mainModule) {
  console.log('AMD Module loaded:', mainModule.message);
});

// 4. Using the optimizer programmatically
const buildConfig = {
  baseUrl: __dirname,
  name: 'main', // The main module to optimize
  out: path.join(__dirname, 'main-built.js'), // Output file
  optimize: 'none', // For demonstration, keep it unminified
  paths: {
    dep: './dep' // Ensure optimizer knows about relative paths
  }
};

requirejs.optimize(buildConfig, function (buildResponse) {
  console.log('\n--- Build Optimization Complete ---');
  console.log(buildResponse);
  const builtContent = fs.readFileSync(buildConfig.out, 'utf8');
  console.log('\nContent of main-built.js (first 500 chars):\n', builtContent.substring(0, 500), '...');

  // Clean up generated files
  fs.unlinkSync('dep.js');
  fs.unlinkSync('main.js');
  fs.unlinkSync('main-built.js');

}, function (err) {
  console.error('\nRequireJS Optimizer Error:', err);
  // Clean up in case of error too
  if (fs.existsSync('dep.js')) fs.unlinkSync('dep.js');
  if (fs.existsSync('main.js')) fs.unlinkSync('main.js');
  if (fs.existsSync('main-built.js')) fs.unlinkSync('main-built.js');
});

view raw JSON →