Skip to content

Latest commit

 

History

History
112 lines (85 loc) · 4.12 KB

README.md

File metadata and controls

112 lines (85 loc) · 4.12 KB

import.meta.resolve() polyfill

🎯 Standard synchronous import.meta.resolve() for anywhere
💡 Inspired by wooorm/import-meta-resolve

⏱ Completely synchronous, just like in the browser
🔃 Works with --loader stuff too!
🌳 Don't need to --experimental-import-meta-resolve
🦄 Importable as a ponyfill or polyfill
🧅 Works in Node.js, Bun, Deno, and the browser too

Installation

npm Yarn pnpm jsDelivr

You can install this package from npm using npm, Yarn, pnpm, or your other favorite npm package manager. 😎

npm install @webfill/import-meta-resolve

If you're using Deno, you can use the npm: specifier or a Deno-compatible npm CDN like esm.sh

import {} from "npm:@webfill/import-meta-resolve";
import {} from "https://esm.sh/@webfill/import-meta-resolve";

If you want to use this package in the browser (🎗️ import.meta.resolve() is well supported in browsers) you can import it directly from an npm CDN like esm.sh or jsDelivr.

import {} from "https://esm.sh/@webfill/import-meta-resolve";
import {} from "https://esm.run/@webfill/import-meta-resolve";

Usage

Node.js Deno Browser Bun

This package exists primarily to smooth over the different names, signatures, and return values among Bun, Deno, Node.js, and the browser.

import resolve from "@webfill/import-meta-resolve";

console.log(resolve(import.meta, "is-odd"));
//=> file:///awesome-project/node_modules/is-odd/index.js
// OR using import maps in a browser:
//=> https://esm.run/is-odd

console.log(resolve(import.meta, "./lib.js"));
//=> file:///awesome-project/lib.js
// OR when in a browser:
//=> https://localhost:8080/lib.js
import polyfill from "@webfill/import-meta-resolve/polyfill.js";
polyfill(import.meta);

console.log(import.meta.resolve("is-odd"));
//=> file:///awesome-project/node_modules/is-odd/index.js
// OR using import maps in a browser:
//=> https://esm.run/is-odd

console.log(import.meta.resolve("./lib.js"));
//=> file:///awesome-project/lib.js
// OR when in a browser:
//=> https://localhost:8080/lib.js

⚠️ The two-argument import.meta.resolve(specifier, parentURL) is only supported on Node.js and Bun! This behaviour cannot be replicated (easily) elsewhere like in Deno or the browser right now. Check out whatwg/html#8077 if you're interested in the standardization discussion.

import polyfill from "@webfill/import-meta-resolve/polyfill.js";
polyfill(import.meta);

console.log(import.meta.resolve("is-odd"));
//=> file:///awesome-project/node_modules/is-odd/index.js

console.log(import.meta.resolve("is-odd", "file:///different-project/app.js"));
//=> file:///different-project/node_modules/is-odd/index.js