Skip to content

Repository files navigation

memfs

In-memory file-system with Node's fs API.

  • Node's fs API implemented, see old API Status, missing list, missing opendir
  • Stores files in memory, in Buffers
  • Throws sameish* errors as Node.js
  • Has concept of i-nodes
  • Implements hard links
  • Implements soft links (aka symlinks, symbolic links)
  • Permissions may* be implemented in the future
  • Can be used in browser, see memfs-webpack

Install

npm install --save memfs

Usage

import{fs}from'memfs';fs.writeFileSync('/hello.txt','World!');fs.readFileSync('/hello.txt','utf8');// World!

Create a file system from a plain JSON:

import{fs,vol}from'memfs';constjson={'./README.md': '1','./src/index.js': '2','./node_modules/debug/index.js': '3',};vol.fromJSON(json,'/app');fs.readFileSync('/app/README.md','utf8');// 1vol.readFileSync('/app/src/index.js','utf8');// 2

Export to JSON:

vol.writeFileSync('/script.sh','sudo rm -rf *');vol.toJSON();// {"/script.sh": "sudo rm -rf *"}

Use it for testing:

vol.writeFileSync('/foo','bar');expect(vol.toJSON()).toEqual({'/foo': 'bar'});

Create as many filesystem volumes as you need:

import{Volume}from'memfs';constvol=Volume.fromJSON({'/foo': 'bar'});vol.readFileSync('/foo');// barconstvol2=Volume.fromJSON({'/foo': 'bar 2'});vol2.readFileSync('/foo');// bar 2

Use memfs together with unionfs to create one filesystem from your in-memory volumes and the real disk filesystem:

import*asfsfrom'fs';import{ufs}from'unionfs';ufs.use(fs).use(vol);ufs.readFileSync('/foo');// bar

Use fs-monkey to monkey-patch Node's require function:

import{patchRequire}from'fs-monkey';vol.writeFileSync('/index.js','console.log("hi world")');patchRequire(vol);require('/index');// hi world

Docs

See also

  • spyfs - spies on filesystem actions
  • unionfs - creates a union of multiple filesystem volumes
  • linkfs - redirects filesystem paths
  • fs-monkey - monkey-patches Node's fs module and require function
  • libfs - real filesystem (that executes UNIX system calls) implemented in JavaScript

License

Unlicense - public domain.

About

In-memory filesystem with Node's API

Resources

Code of conduct

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages