export default命令用于指定模块的默认输出。显然,一个模块只能有一个默认输出,所以export deault命令只能使用一次。因此,import命令后面才不用加大括号,相反其它的export 输出 能够有多个,且import时必须加大括号,示例以下:node
1 // modules.js 2 function add(x, y) { 3 return x * y; 4 } 5 export {add as default}; 6 // 等同于 7 // export default add; 8 9 // app.js 10 import { default as xxx } from 'modules'; 11 // 等同于 12 // import xxx from 'modules';
正是由于export default
命令其实只是输出一个叫作default
的变量,因此它后面不能跟变量声明语句,而export须要跟变量声明或者大括号做为输出:app
1 // 正确 2 export var a = 1; 3 4 // 正确 5 var a = 1; 6 export default a; // 写法1 7 export {a} // 写法2 8 9 // 错误 10 export default var a = 1;
开始玩的时候,老是出现 cannot find module 问题,原来 在 import 的时候 若是不使用相对路径或者绝对路径,node默认会去node_modules/文件夹下去找,例如:spa
1 import * as obj from 'exports' 2 // node 会试着去寻找 node_modules/exports.js 模块 3 4 // 正确写法 5 import * as obj from './exports'
关于 import * as obj from 'xx' 这种写法是把全部的输出包裹到obj对象里code
对了,还有模块的继承写法:对象
1 // circle.js 2 export var a = 1; 3 4 // circleplus.js 当前模块继承了 circle 模块的全部输出 5 // 此处只是继承了输出,并不能直接使用 6 7 export * from 'circle'; 8 export var e = 2.71828182846; 9 export default function(x) { 10 return Math.exp(x); 11 } 12 13 // 继承以后,circleplus.js 至关于下面代码 14 export var a = 1; 15 export var e = 2.71828182846; 16 export default function(x) { 17 return Math.exp(x); 18 }