Allows you to require files in a custom vm context.

Downloads in past


1.4.2a month ago6 years agoMinified + gzip package size for context-require in KB


Creates a new require function which runs all required modules in a context other than global. Supports custom require extensions and resolvers. Useful for things like mocking the package.json browser field without a bundler and using JSDOM (without using jsdom global) along side the native commonjs require system.
Although other uses are possible this module was built to run tests in a browser like context with out using a bundler. Because modules are cached once per context this tool also makes it easy to isolate globals and state between tests running in the same process.
npm install context-require
import createRequire from "context-require";

const browserRequire = createRequire({
  dir: __dirname,
  context: new JSDOM('<div>Hello World</div>').window, // This object becomes the context for any required files.
  extensions: ..., // Same as require.extensions but only used in the above context.
  resolve(from, request, parentModule) {...} // Override file resolution for this context.

browserRequire("./get-document-body").innerHTML; // <div>Hello World</div>

typeof global; // undefined
module.exports = document.body;


  • Use npm test to build and run tests.

Please feel free to create a PR!