This library implements some standard interfaces of [import.meta](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import.meta) with the aim of resolving the confusion caused by multiple standards in Node.js. It includes unified
npm install import-meta-ponyfillThis library implements some standard interfaces of import.meta with the aim of resolving the confusion caused by multiple standards in Node.js.
It includes unified support for the following Node.js standards:
- commonjs
``ts`
const import_meta_ponyfill = require("import-meta-ponyfill");
const importMeta = import_meta_ponyfill(require, module);
importMeta.resolve; // function
importMeta.main; // boolean
importMeta.url; // string
importMeta.filename; // string
importMeta.dirname; // string
`
- esmodule
ts`
import import_meta_ponyfill from "import-meta-ponyfill";
const importMeta = import_meta_ponyfill(import.meta);
- v20.6.0, v18.19.0
> Unflag import.meta.resolve, with parentURL parameter still flagged.
- v20.6.0, v18.19.0
> This API no longer throws when targeting file: URLs that do not map to an existing file on the local FS.
- v20.0.0, v18.19.0
> This API now returns a string synchronously instead of a Promise.
- v16.2.0, v14.18.0
> Add support for WHATWG URL object to parentURL parameter.
- url: string;file:///path/module.ts
> A string representation of the fully qualified module URL. When the
> module is loaded locally, the value will be a file URL (e.g.
> ).`
>
> You can also parse the string as a URL to determine more information about
> how the current module was loaded. For example to determine if a module was
> local or not:
>
> ts`
> const url = new URL(importMeta.url);
> if (url.protocol === "file:") {
> console.log("this module was loaded locally");
> }
> resolve(specifier: string, parent?: string | URL | undefined): string;
- import.meta.resolve(specifier)
> A function that returns the resolved specifier,
> see ,`
> even attempting to return a result for non-existent paths.
>
> ts`
> console.log(importMeta.resolve("./foo.js"));
> // file:///dev/foo.js
> parent
>
> @param specifier The module specifier to resolve relative to .file:
> @param parent The absolute parent module URL to resolve from.
> @returns The absolute () URL string for the resolved module.nodeResolve(specifier: string, parent?: string | URL | undefined): string;
- import.meta.resolve(specifier) or require.resolve(specifier)
> A function that returns resolved specifier as if it would be imported
> using .`
>
> ts`
> console.log(import.meta.nodeResolve("./foo.js"));
> // file:///dev/foo.js
> parent
>
> @param specifier The module specifier to resolve relative to .file:
> @param parent The absolute parent module URL to resolve from.
> @returns The absolute () URL string for the resolved module.main: boolean;
- `
> A flag that indicates if the current module is the main module that was
> called when starting the program under Deno.
>
> ts`
> if (importMeta.main) {
> // this was loaded as the main module, maybe do some bootstrapping
> }
> filename: string;
-
> The absolute path of the current module.
>
> This property is only provided for local modules (ie. using file:// URLs).`
>
> Example:
>
> ts`
> // Unix
> console.log(importMeta.filename); // /home/alice/my_module.ts
>
> // Windows
> console.log(importMeta.filename); // C:\alice\my_module.ts
>
- dirname: string;file://
> The absolute path of the directory containing the current module.
>
> This property is only provided for local modules (ie. using URLs).`
>
> > Example:
>
> ts``
> // Unix
> console.log(importMeta.dirname); // /home/alice
>
> // Windows
> console.log(importMeta.dirname); // C:\alice
>