aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/javascript/reference/statements/import.meta/index.html
blob: ffab140a3789e6fd89f46ba24fc2b12445a348bd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
---
title: import.meta
slug: Web/JavaScript/Reference/Statements/import.meta
tags:
  - JavaScript
  - Language feature
  - Modules
  - Reference
  - Statement
  - import
translation_of: Web/JavaScript/Reference/Statements/import.meta
---
<div>{{JSSidebar("Statements")}}</div>

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

<h2 id="语法">语法</h2>

<pre class="syntaxbox">import.meta</pre>

<h2 id="描述">描述</h2>

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

<p><code>import.meta</code>对象是由ECMAScript实现的,它带有一个{{jsxref("null")}}的原型对象。这个对象可以扩展,并且它的属性都是可写,可配置和可枚举的。</p>

<h2 id="示例">示例</h2>

<p>这里有一个 <code>my-module.mjs模块</code></p>

<pre class="brush: html">&lt;script type="module" src="my-module.mjs"&gt;&lt;/script&gt;
</pre>

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

<pre class="brush: js">console.log(import.meta); // { url: "file:///home/user/my-module.mjs" }</pre>

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

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

<p>以下面的HTML为例:</p>

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

<p>...下面的JavaScript会打印<code>someURLInfo</code>这个参数:</p>

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

<p>在脚本中引入别的脚本同样生效:</p>

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

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

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

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

<h2 id="规范">规范</h2>

{{Specifications}}

<h2 id="浏览器支持">浏览器支持</h2>

<p>{{Compat("javascript.statements.import_meta")}}</p>

<h2 id="See_also">See also</h2>

<ul>
 <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/import">import</a></li>
 <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/export">export</a></code></li>
</ul>