import MyDefaultExport from "./MyFileWithADefaultExport";
你可以给它起任何你喜欢的名字。
命名导出(export)
使用命名导出,每个文件可以有多个命名导出。然后导入你想要用大括号括起来的特定导出:
// ex. importing multiple exports:
import { MyClass, MyOtherClass } from "./MyClass";
// ex. giving a named import a different name by using "as":
import { MyClass2 as MyClass2Alias } from "./MyClass2";
// use MyClass, MyOtherClass, and MyClass2Alias here
或者也可以在同一个语句中使用默认值和命名导入:
import MyDefaultExport, { MyClass, MyOtherClass} from "./MyClass";
导入命名空间
也可以从文件中导入对象的所有内容:
import * as MyClasses from "./MyClass";
// use MyClasses.MyClass, MyClasses.MyOtherClass and MyClasses.default here
export function divide( x ){
return x / 2;
}
// only one 'default' function may be exported and the rest (above) must be named
export default function( x ){ // <---- declared as a default function
return x * x;
}
导入上述函数。为default命名:
// The default function should be the first to import (and named whatever)
import square, {divide} from './module_1.js'; // I named the default "square"
console.log( square(2), divide(2) ); // 4, 1
// a.mjs
export let x = 5;
// or
// let x = 5;
// export { x }
setInterval(() => {
x++;
}, 1000);
export default x;
// index.mjs
import y, { x } from './1.mjs';
setInterval(() => {
console.log(y, x);
}, 1000);
# install node 13 or above
node ./index.mjs
我们应该得到以下输出:
6 5
7 5
8 5
...
...
为什么我们需要这种差异
最有可能的是,export default用于兼容commonjs module.exports。
如何使用捆绑器(rollup, webpack)实现这一点
对于上面的代码,我们使用rollup来捆绑。
rollup ./index.mjs --dir build
和构建输出:
// build/index.js
let x = 5;
// or
// let x = 5;
// export { x }
setInterval(() => {
x++;
}, 1000);
var y = x;
setInterval(() => {
console.log(y, x);
}, 1000);