如果在一个模块中,先输入和后输出同一个模块,import语句可以与export语句写在一起;
export {foo,bar} from 'my_module';
//可以简单理解为
import {foo,bar} from 'my_module';
export {foo,bar};
上面的代码仅仅做了中转;当前模块是使用不了的;
模块的接口改名和整体输出;也可以柴永这种写法;
export {foo as myFoo} from 'my_module';
//整体输出;
export * from 'my_module';
默认接口的写法如下;
import();
简介:
前面介绍过;import命令会被javascript引擎静态分析;先与模块内的其他语句执行(import命令叫做‘连接’ binding其实更合适)。所以,下面的代码会报错;
if(x===2){
import MyMoudle from './myModule';
};
上面代码中,引擎处理import语句是在编译时,这时不会去分析或执行if语句,所以import语句放在if代码块之中毫无意义,因此会报句法错误,而不是执行时错误。也就是说,import和export命令只能在模块的顶层,不能在代码块之中(比如,在if代码块之中,或在函数之中)。
这样的写法固然提高编译的效率;当时无法在运行时进行逻辑判断;而且在语法上条件加载无法实现;如果import命令要取代 Node 的require方法,这就形成了一个障碍。因为require是运行时加载模块,import命令无法取代require的动态加载功能。
const path = './' + fileName;
const myModual = require(path);
上面的语句就是动态加载,require到底加载哪一个模块,只有运行时才知道。import命令做不到这一点。
网友评论