Skip to content

web4more/import-meta-resolve

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

99 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

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

About

🎯 Standard synchronous import.meta.resolve() for anywhere

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 8