context-require

Allows you to require files in a custom vm context.

Usage no npm install needed!

<script type="module">
  import contextRequire from 'https://cdn.skypack.dev/context-require';
</script>

README

context-require
API Stability TypeScript Styled with prettier Build status Test Coverage NPM Version Downloads

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.

Installation

npm install context-require

Example

./index.js

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) {...} // Override file resolution for this context.
});

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

./get-document-body.js

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

Contributions

  • Use npm test to build and run tests.

Please feel free to create a PR!