Package Exports
- @cowasm/memfs
- @cowasm/memfs/lib/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@cowasm/memfs) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
memfs
This is a fork of https://www.npmjs.com/package/memfs, since there's a bunch of critical bugs and missing maintenance there, which might not be a priority for that project, but are definitely a priority for me (though I'm sending PR's). Upstream memfs has nearly 12 million downloads a week, so I can see why doing these changes would be really scary there!
Things I've done here include:
- update to newest jest, and increase maxWorkers for testing; fix an issue with one test
- update to newest typescript and node typings
- update target to es2020 from es5; this does make code run more efficiently and is much easier to debug if you want to directly edit node_modules
- fix the 13 security vulnerabilities revealed by npm audit
- upgrade prettier and switch to using the defaults
- switch to package-lock.json instead of yarn's lock
- fix chmodSync bug
- fix utimesSync bug
- fix realpathSync bug
See https://github.com/sagemathinc/memfs-js
Upstream description
In-memory file-system with Node's fs
API.
- Node's
fs
API implemented, see old API Status, missing list, missingopendir
- Stores files in memory, in
Buffer
s - 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";
const json = {
"./README.md": "1",
"./src/index.js": "2",
"./node_modules/debug/index.js": "3",
};
vol.fromJSON(json, "/app");
fs.readFileSync("/app/README.md", "utf8"); // 1
vol.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";
const vol = Volume.fromJSON({ "/foo": "bar" });
vol.readFileSync("/foo"); // bar
const vol2 = 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 * as fs from "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 actionsunionfs
- creates a union of multiple filesystem volumeslinkfs
- redirects filesystem pathsfs-monkey
- monkey-patches Node'sfs
module andrequire
functionlibfs
- real filesystem (that executes UNIX system calls) implemented in JavaScript
License
Unlicense - public domain.