Skip to content

sindresorhus/import-fresh

import-fresh

Import a module while bypassing the cache

Useful for testing purposes when you need to freshly import a module.

Requirements

  • Node.js 22.15 or later (uses module loader hooks)

Install

npm install import-fresh

Usage

// foo.js
let count = 0;
export default function increment() {
	count += 1;
	return count;
}
import createImportFresh from 'import-fresh';

const importFresh = createImportFresh(import.meta.url);
const {default: increment} = await importFresh('./foo.js');

increment();
//=> 1

increment();
//=> 2

const {default: freshIncrement} = await importFresh('./foo.js');

freshIncrement();
//=> 1

API

createImportFresh(parentURL, options?)

Returns an importFresh function bound to parentURL.

parentURL must be a valid hierarchical URL string (for example import.meta.url) or a URL instance.

options

Type: object

The options are process-global. Every call in the same process must use the same skipNodeModules value.

skipNodeModules

Type: boolean
Default: false

When true, modules inside node_modules directories are not cache-busted. This means that dependencies from npm packages will share state across fresh imports, which can be useful when you only want to freshly import your own code.

importFresh(moduleSpecifier, options?)

The function returned by createImportFresh.

options

Type: object

importAttributes

Type: object

Import attributes passed to import(). Each value must be a string. JSON modules are automatically imported with {type: 'json'} when the specifier ends with .json.

Caveat

Intended for development usage only. Repeated calls grow the ESM module cache because each call uses a unique cache-busting URL. This is an unavoidable “memory leak” and not considered a vulnerability.

Related

About

Import a module while bypassing the cache

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors