{"id":14155466,"url":"https://github.com/imranbarbhuiya/esbuild-plugins-node-modules-polyfill","last_synced_at":"2025-04-11T06:51:16.447Z","repository":{"id":45813161,"uuid":"511937957","full_name":"imranbarbhuiya/esbuild-plugins-node-modules-polyfill","owner":"imranbarbhuiya","description":"An esbuild plugin to polyfill nodejs builtin modules for the browser.","archived":false,"fork":false,"pushed_at":"2024-05-19T21:07:41.000Z","size":15235,"stargazers_count":17,"open_issues_count":2,"forks_count":5,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-05-20T06:31:02.466Z","etag":null,"topics":["esbuild","esbuild-plugin","hacktoberfest","javascript","nodejs","polyfill","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/imranbarbhuiya.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["imranbarbhuiya"]}},"created_at":"2022-07-08T15:14:40.000Z","updated_at":"2024-06-01T00:21:14.642Z","dependencies_parsed_at":"2022-07-17T09:16:22.070Z","dependency_job_id":"9f3fd383-afe8-4ef2-b31a-771b13db75c7","html_url":"https://github.com/imranbarbhuiya/esbuild-plugins-node-modules-polyfill","commit_stats":{"total_commits":109,"total_committers":4,"mean_commits":27.25,"dds":0.3027522935779816,"last_synced_commit":"ddb8cd626d15746176c2feea5275eccec283d690"},"previous_names":[],"tags_count":33,"template":false,"template_full_name":"imranbarbhuiya/package-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imranbarbhuiya%2Fesbuild-plugins-node-modules-polyfill","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imranbarbhuiya%2Fesbuild-plugins-node-modules-polyfill/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imranbarbhuiya%2Fesbuild-plugins-node-modules-polyfill/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imranbarbhuiya%2Fesbuild-plugins-node-modules-polyfill/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/imranbarbhuiya","download_url":"https://codeload.github.com/imranbarbhuiya/esbuild-plugins-node-modules-polyfill/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248358548,"owners_count":21090401,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["esbuild","esbuild-plugin","hacktoberfest","javascript","nodejs","polyfill","typescript"],"created_at":"2024-08-17T08:03:25.144Z","updated_at":"2025-04-11T06:51:16.425Z","avatar_url":"https://github.com/imranbarbhuiya.png","language":"TypeScript","funding_links":["https://github.com/sponsors/imranbarbhuiya","https://www.buymeacoffee.com/parbez","https://ko-fi.com/Y8Y1CBIJH'"],"categories":["TypeScript","typescript"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# esbuild-plugins-node-modules-polyfill\n\n**Polyfills nodejs builtin modules for the browser.**\n\n[![GitHub](https://img.shields.io/github/license/imranbarbhuiya/esbuild-plugins-node-modules-polyfill)](https://github.com/imranbarbhuiya/esbuild-plugins-node-modules-polyfill/blob/main/LICENSE)\n[![npm](https://img.shields.io/npm/v/esbuild-plugins-node-modules-polyfill?color=crimson\u0026logo=npm\u0026style=flat-square)](https://www.npmjs.com/package/esbuild-plugins-node-modules-polyfill)\n\n\u003c/div\u003e\n\n## Description\n\nPolyfills nodejs builtin modules and globals for the browser.\n\n## Features\n\n-   Written In Typescript\n-   Offers CJS and ESM builds\n-   Full TypeScript \u0026 JavaScript support\n-   Supports `node:` protocol\n-   Supports [`browser` field in `package.json`](https://github.com/defunctzombie/package-browser-field-spec)\n-   Optionally injects globals\n-   Optionally provides empty fallbacks\n\n## Install\n\n```bash\nnpm install --save-dev esbuild-plugins-node-modules-polyfill\n\n```\n\n## Usage\n\n```ts\nimport { nodeModulesPolyfillPlugin } from 'esbuild-plugins-node-modules-polyfill';\nimport { build } from 'esbuild';\nbuild({\n\tplugins: [nodeModulesPolyfillPlugin()],\n});\n```\n\n### Inject globals when detected:\n\n```ts\nimport { nodeModulesPolyfillPlugin } from 'esbuild-plugins-node-modules-polyfill';\nimport { build } from 'esbuild';\nbuild({\n\tplugins: [\n\t\tnodeModulesPolyfillPlugin({\n\t\t\tglobals: {\n\t\t\t\tprocess: true,\n\t\t\t\tBuffer: true,\n\t\t\t},\n\t\t}),\n\t],\n});\n```\n\n\u003e [!Note]\n\u003e If you are utilizing the [`modules`](#configure-which-modules-to-polyfill) option, ensure that you include polyfills for the global modules you are using.\n\n### Configure which modules to polyfill:\n\n```ts\nimport { nodeModulesPolyfillPlugin } from 'esbuild-plugins-node-modules-polyfill';\nimport { build } from 'esbuild';\nbuild({\n\tplugins: [\n\t\tnodeModulesPolyfillPlugin({\n\t\t\tmodules: ['crypto'],\n\t\t}),\n\t],\n});\n```\n\n```ts\nimport { nodeModulesPolyfillPlugin } from 'esbuild-plugins-node-modules-polyfill';\nimport { build } from 'esbuild';\nbuild({\n\tplugins: [\n\t\tnodeModulesPolyfillPlugin({\n\t\t\tmodules: {\n\t\t\t\tcrypto: true,\n\t\t\t\tfs: false,\n\t\t\t},\n\t\t}),\n\t],\n});\n```\n\n### Provide empty polyfills:\n\n#### Provide empty polyfills for specific modules:\n\n```ts\nimport { nodeModulesPolyfillPlugin } from 'esbuild-plugins-node-modules-polyfill';\nimport { build } from 'esbuild';\nbuild({\n\tplugins: [\n\t\tnodeModulesPolyfillPlugin({\n\t\t\tmodules: {\n\t\t\t\tfs: 'empty',\n\t\t\t\tcrypto: true,\n\t\t\t},\n\t\t}),\n\t],\n});\n```\n\n#### Provide empty fallbacks for any unpolyfilled modules:\n\n```ts\nimport { nodeModulesPolyfillPlugin } from 'esbuild-plugins-node-modules-polyfill';\nimport { build } from 'esbuild';\nbuild({\n\tplugins: [\n\t\tnodeModulesPolyfillPlugin({\n\t\t\tfallback: 'empty',\n\t\t}),\n\t],\n});\n```\n\n#### Provide empty fallbacks for any unconfigured modules:\n\n```ts\nimport { nodeModulesPolyfillPlugin } from 'esbuild-plugins-node-modules-polyfill';\nimport { build } from 'esbuild';\nbuild({\n\tplugins: [\n\t\tnodeModulesPolyfillPlugin({\n\t\t\tfallback: 'empty',\n\t\t\tmodules: {\n\t\t\t\tcrypto: true,\n\t\t\t},\n\t\t}),\n\t],\n});\n```\n\n### Fail the build when certain modules are used:\n\n\u003e [!Important]\n\u003e The `write` option in `esbuild` must be `false` to support this.\n\n```ts\nimport { nodeModulesPolyfillPlugin } from 'esbuild-plugins-node-modules-polyfill';\nimport { build } from 'esbuild';\nconst buildResult = await build({\n\twrite: false,\n\tplugins: [\n\t\tnodeModulesPolyfillPlugin({\n\t\t\tmodules: {\n\t\t\t\tcrypto: 'error',\n\t\t\t\tpath: true,\n\t\t\t},\n\t\t}),\n\t],\n});\n```\n\n### Fail the build when a module is not polyfilled or configured:\n\n\u003e [!Important]\n\u003e The `write` option in `esbuild` must be `false` to support this.\n\n```ts\nimport { nodeModulesPolyfillPlugin } from 'esbuild-plugins-node-modules-polyfill';\nimport { build } from 'esbuild';\nconst buildResult = await build({\n\twrite: false,\n\tplugins: [\n\t\tnodeModulesPolyfillPlugin({\n\t\t\tfallback: 'error',\n\t\t\tmodules: {\n\t\t\t\tpath: true,\n\t\t\t},\n\t\t}),\n\t],\n});\n```\n\n### Provide a custom error formatter when a module is not polyfilled or configured:\n\nReturn an esbuild `PartialMessage` object from the `formatError` function to override any properties of the default error message.\n\n\u003e [!Important]\n\u003e The `write` option in `esbuild` must be `false` to support this.\n\n```ts\nimport { nodeModulesPolyfillPlugin } from 'esbuild-plugins-node-modules-polyfill';\nimport { build } from 'esbuild';\nconst buildResult = await build({\n\twrite: false,\n\tplugins: [\n\t\tnodeModulesPolyfillPlugin({\n\t\t\tfallback: 'error',\n\t\t\tmodules: {\n\t\t\t\tpath: true,\n\t\t\t},\n\t\t\tformatError({ moduleName, importer, polyfillExists }) {\n\t\t\t\treturn {\n\t\t\t\t\ttext: polyfillExists\n\t\t\t\t\t\t? `Polyfill has not been configured for \"${moduleName}\", imported by \"${importer}\"`\n\t\t\t\t\t\t: `Polyfill does not exist for \"${moduleName}\", imported by \"${importer}\"`,\n\t\t\t\t};\n\t\t\t},\n\t\t}),\n\t],\n});\n```\n\n## Buy me some doughnuts\n\nIf you want to support me by donating, you can do so by using any of the following methods. Thank you very much in advance!\n\n\u003ca href=\"https://www.buymeacoffee.com/parbez\" target=\"_blank\"\u003e\u003cimg src=\"https://cdn.buymeacoffee.com/buttons/default-orange.png\" alt=\"Buy Me A Coffee\" height=\"41\" width=\"174\"\u003e\u003c/a\u003e\n\u003ca href='https://ko-fi.com/Y8Y1CBIJH' target='_blank'\u003e\u003cimg height='36' style='border:0px;height:36px;' src='https://cdn.ko-fi.com/cdn/kofi4.png?v=3' border='0' alt='Buy Me a Coffee at ko-fi.com' /\u003e\u003c/a\u003e\n\n## Contributors ✨\n\nThanks goes to these wonderful people:\n\n\u003ca href=\"https://github.com/imranbarbhuiya/esbuild-plugins-node-modules-polyfill/graphs/contributors\"\u003e\n    \u003cimg src=\"https://contrib.rocks/image?repo=imranbarbhuiya/esbuild-plugins-node-modules-polyfill\" /\u003e\n\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimranbarbhuiya%2Fesbuild-plugins-node-modules-polyfill","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimranbarbhuiya%2Fesbuild-plugins-node-modules-polyfill","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimranbarbhuiya%2Fesbuild-plugins-node-modules-polyfill/lists"}