import.meta

import.meta是一个给JavaScript模块暴露特定上下文的元数据属性的对象。它包含了这个模块的信息,比如说这个模块的URL。

语法

import.meta

描述

import.meta对象由一个关键字"import",一个点符号和一个meta属性名组成。通常情况下"import."是作为一个属性访问的上下文,但是在这里"import"不是一个真正的对象。

import.meta对象是由ECMAScript实现的,它带有一个null的原型对象。这个对象可以扩展,并且它的属性都是可写,可配置和可枚举的。

示例

这里有一个 my-module.mjs模块

<script type="module" src="my-module.mjs"></script>

你可以通过 import.meta 对象获取这个模块的元数据信息.

console.log(import.meta); // { url: "file:///home/user/my-module.mjs" }

它返回一个带有url属性的对象,指明模块的基本URL。也可以是外部脚本的URL,还可以是内联脚本所属文档的URL。

注意,url也可能包含参数或者哈希(比如后缀?#

以下面的HTML为例:

<script type="module">
import './index.mjs?someURLInfo=5';
</script>

...下面的JavaScript会打印someURLInfo这个参数:

// index.mjs
new URL(import.meta.url).searchParams.get('someURLInfo'); // 5

在脚本中引入别的脚本同样生效:

// index.mjs
import './index2.mjs?someURLInfo=5';

// index2.mjs
new URL(import.meta.url).searchParams.get('someURLInfo'); // 5

虽然在上述例子中,Node.js允许携带参数(或哈希),但以Node 14.1.0为例,使用node --experimental-modules index.mjs?someURLInfo=5 执行脚本,查询URL参数将会报错(该环境下index.mjs?someURLInfo=5 被视作一个文件而不是URL)

像这种特定于文件的参数传递可能是对应用范围内location.href(ps: 通过在HTML路径添加参数或哈希)(而在Node.js中是process.env)的补充

规范

规范 状态 备注
tc39/proposal-import-meta Stage 3 Initial definition.
HTML Standard Living Standard Defines import.meta properties in HTML.

浏览器支持

BCD tables only load in the browser

See also