ES6 import的优先级很高,所有的依赖模块都会在模块代码执行之前加载
### 语法
~~~
import defaultExport from "module-name";
import * as name from "module-name";
import { export } from "module-name";
import { export as alias } from "module-name";
import { export1 , export2 } from "module-name";
import { foo , bar } from "module-name/path/to/specific/un-exported/file";
import { export1 , export2 as alias2 , [...] } from "module-name";
import defaultExport, { export [ , [...] ] } from "module-name";
import defaultExport, * as name from "module-name";
import "module-name";
var promise = import("module-name");
~~~
### **1)导入整个模块的内容**
这将`myModule`插入当前作用域,其中包含来自位于`/modules/my-module.js`文件中导出的所有模块。
~~~js
import * as myModule from '/modules/my-module.js';
~~~
在这里,访问导出意味着使用模块名称(在这种情况下为“myModule”)作为命名空间。例如,如果上面导入的模块包含一个`doAllTheAmazingThings()`,你可以这样调用:
~~~js
myModule.doAllTheAmazingThings();
~~~
### ** 2)导入单个导出**
给定一个名为`myExport`的对象或值,它已经从模块`my-module`导出(因为整个模块被导出)或显式地导出(使用[`export`](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/export "有两种不同的导出方式,每种方式对应于上述的一种语法:")语句),将`myExport`插入当前作用域。
~~~js
import {myExport} from '/modules/my-module.js';
~~~
### 3)导入多个导出
这将`foo`和`bar`插入当前作用域。
~~~js
import {foo, bar} from '/modules/my-module.js';
~~~
### 4)导入带有别名的导出
导入时可以重命名导出。例如,将`shortName`插入当前作用域。
~~~js
import {reallyReallyLongModuleExportName as shortName}
from '/modules/my-module.js';
~~~
### 5)导入时重命名多个导出
使用别名导入模块的多个导出。
~~~js
import {
reallyReallyLongModuleMemberName as shortName,
anotherLongModuleName as short
} from '/modules/my-module.js';
~~~
### 6)仅为副作用而导入一个模块
模块仅为副作用(中性词,无贬义含义)而导入,而不导入模块中的任何内容。 这将运行模块中的全局代码, 但实际上不导入任何值。
~~~
import '/modules/my-module.js';
~~~
### 7)导入默认值
在`default`[`export`](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/export "有两种不同的导出方式,每种方式对应于上述的一种语法:")(无论是对象,函数,类等)有效时可用。然后可以使用`import`语句来导入这样的默认值。
~~~js
import myDefault from '/modules/my-module.js';
~~~
也可以同时将`default`语法与上述用法(命名空间导入或命名导入)一起使用。在这种情况下,`default`导入必须首先声明。 例如:
~~~js
import myDefault, * as myModule from '/modules/my-module.js';
// myModule used as a namespace
~~~
或者
~~~js
import myDefault, {foo, bar} from '/modules/my-module.js';
// specific, named imports
~~~
~~~js
//声明
function getJSON(url, callback) {
let xhr = new XMLHttpRequest();
xhr.onload = function () {
callback(this.responseText)
};
xhr.open('GET', url, true);
xhr.send();
}
export function getUsefulContents(url, callback) {
getJSON(url, data => callback(JSON.parse(data)));
}
//导入
import { getUsefulContents } from '/modules/file.js';
getUsefulContents('http://www.example.com',
data => { doSomethingUseful(data); });
~~~
学习链接
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/import