streamich / memfs

JavaScript file system utilities
http://streamich.github.io/memfs/
Apache License 2.0
1.74k stars 130 forks source link

Create a `Volume` from a real directory #959

Open regseb opened 11 months ago

regseb commented 11 months ago

For my unit tests, I'd like to create a virtual file system with a single file and also the directory node_modules/. My program has a dependency that:

With mock-fs, I use mock.load():

mock({
  'foo.txt': 'bar',
  'node_modules/': mock.load('node_modules/'),
});

I'd like to switch to memfs (with fs-monkey), but I can't add the node_modules/ directory to the virtual file system.


I suggest adding the Volume.fromDirectory() function to create a volume from a real directory:

import { Volume } from 'memfs';
import { Union } from 'unionfs';
import { patchFs } from 'fs-monkey';

patchFs(new Union()
  .use(Volume.fromJSON({ 'foo.txt': 'bar' }))
  .use(Volume.fromDirectory('node_modules/')));
manferlo81 commented 3 months ago

same problem here, I am trying to replace mock-fs as it hasn't been updated in 2 year and it has a bug with NodeJS >=20 (not working with readFileSync & writeFileSync... maybe others) but I am having a hard time finding a solution formthis very issue.

I need to add a "clone" (let's call it a clone) of my node_modules folder into my volume as some of my dependencies will look for some modules during test. I could reinvent the wheel and write a function to read my "real" node_modules and add it to my volume but I think this is a functionality memfs should have, maybe I am missing something and there is a way, thoughts?