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"><script type="module" src="my-module.mjs"></script>
</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><script type="module">
import './index.mjs?someURLInfo=5';
</script></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>
|