import.meta - JavaScript 编辑

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-metaStage 3Initial definition.
HTML StandardLiving StandardDefines import.meta properties in HTML.

浏览器支持

BCD tables only load in the browser

The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.

Implementation Progress

The following table provides a daily implementation status for this feature, because this feature has not yet reached cross-browser stability. The data is generated by running the relevant feature tests in Test262, the standard test suite of JavaScript, in the nightly build, or latest release of each browser's JavaScript engine.

See also

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

词条统计

浏览:139 次

字数:4923

最后编辑:8年前

编辑次数:0 次

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文