modern polyfills for node native modules based on jspm-core
npm install modern-node-polyfillsHere are the modules that are supported in modern-node-polyfills.
ts
import { polyfillPath } from "modern-node-polyfills";console.log(await polyfillPath("fs"))
// /home/bagher/project/@jspm/core/nodelibs/browser/fs.js
`$3
This function returns the path of the requested module.
`ts
await polyfillPath("fs");
await polyfillPath("node:fs") // Modules can have the node prefix
`$3
It returns the bundled content of a specific node module instead of a path.
`ts
console.log(await polyfillContent("fs"));
// the bundled source of fs
`inject
This function tries to do the work of @rollup/plugin-inject plugin! but it also adds a new option called expressions which is for replacing javascript expressions like __filename.`ts
console.log(await inject("console.log(__filename);", {
// replaces every global __filename with "/"
expressions: { __filename: "/" },
modules: {
// replaces every global Buffer with the imported Buffer from the polyfill buffer
Buffer: [await polyfillPath("buffer"), "Buffer"],
}
}))
// logs console.log("/")
`polyfillGlobals
A way to polyfill all global node expressions, in this case, process,
Buffer, global, setImmediate, clearImmediate, __dirname and __filename. It's possible to customize the __filename and __dirname values in the second argument of this function.
`ts
console.log(await polyfillGlobals())
// shows the polyfilled content
`
As a third argument, it's possible to change the path of those global polyfills or
even disable them using null.`ts
const content = await polyfillGlobals(
,
{},
{
process: "/here/process.js",
Buffer: null,
global: null,
setImmediate: null,
clearImmediate: null,
}
);
``