In-memory file-system with Node's fs API.
- Node's
fsAPI implemented, see old API Status, missing list, missingopendir - 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
npm install --save memfsimport{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');// 2Export 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 2Use 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');// barUse 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 worldspyfs- spies on filesystem actionsunionfs- creates a union of multiple filesystem volumeslinkfs- redirects filesystem pathsfs-monkey- monkey-patches Node'sfsmodule andrequirefunctionlibfs- real filesystem (that executes UNIX system calls) implemented in JavaScript
Unlicense - public domain.