56 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # `patchRequire(vol[, unixifyPaths[, Module]])`
 | |
| 
 | |
| Patches Node's `module` module to use a given *fs-like* object `vol` for module loading.
 | |
| 
 | |
|  - `vol` - fs-like object
 | |
|  - `unixifyPaths` *(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.
 | |
| 
 | |
| ```js
 | |
| 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`](https://github.com/streamich/memfs) package:
 | |
| 
 | |
| ```js
 | |
| 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`](https://github.com/streamich/unionfs) package
 | |
| to combine both filesystems into a union:
 | |
| 
 | |
| ```js
 | |
| 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
 | |
| ```
 |