patchRequire(vol[, unixifyPaths[, Module]])
Patches Node's module
module to use a given fs-like object vol
for module loading.
vol
- fs-like objectunixifyPaths
(optional) - whether to convert Windows paths to unix style paths, defaults to false
.Module
(optional) - a module to patch, defaults to require('module')
Monkey-patches the require
function in Node, this way you can make
Node.js to require modules from your custom filesystem.
It expects an object with three filesystem methods implemented that are
needed for the require
function to work.
let vol = {
readFileSync: () => {},
realpathSync: () => {},
statSync: () => {},
};
If you want to make Node.js to require your files from memory, you
don't need to implement those functions yourself, just use the
memfs
package:
import {vol} from 'memfs';
import {patchRequire} from 'fs-monkey';
vol.fromJSON({'/foo/bar.js': 'console.log("obi trice");'});
patchRequire(vol);
require('/foo/bar'); // obi trice
Now the require
function will only load the files from the vol
file
system, but not from the actual filesystem on the disk.
If you want the require
function to load modules from both file
systems, use the unionfs
package
to combine both filesystems into a union:
import {vol} from 'memfs';
import {patchRequire} from 'fs-monkey';
import {ufs} from 'unionfs';
import * as fs from 'fs';
vol.fromJSON({'/foo/bar.js': 'console.log("obi trice");'});
ufs
.use(vol)
.use(fs);
patchRequire(ufs);
require('/foo/bar.js'); // obi trice