export 和 export default 之间的区别和 import
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了export 和 export default 之间的区别和 import相关的知识,希望对你有一定的参考价值。
参考技术A Nodejs使用模块化工具管理的原理,每个独立的js文件都可以看做是一个模块,每个模块中都隐含着exports和和module.exports两个对象,下边说一下个人在学习中队这其的理解首先,举个例子,编写一个exports_test.js模块,代码如下:
var name="我是var声明的name变量";exports.name="我是exports下的属性name";function sayName() console.log("我是function 声明的sayName()方法!");exports.sayName1=function() console.log("我是exports下的一个方法!");;
2
然后新建一个test.js,将上面的模块引入:
var exports_test=require('./exports_test.js');
console.log(exports_test);//输出
执行test.js后,可以看到输出的结果如图
name: '我是exports下的属性name', sayName1: [Function]
3
由以上可以看出,任何exports属性和方法都可以再外部访问,而var声明和funciton直接定义方法都是私有的,只有在exports暴露后才是共有的。外部才可以通过exports_test.name类型获取,如下
console.log(exports_test.name);console.log(exports_test.sayName1());
END
module.exports说明
1
module.exports也可以像exports的用法那样,可以替代exports的用处。module.exports包含exports,反过来exports不能替代module.exports。
END
module.exports和exports区别
1
module.exports可以单独的定义,返回数据类型,而export只能是返回一个object对象。如
module.exports=['劳黑炭','百度经验','module.exports'];//正确
exports=['劳黑炭','百度经验','module.exports'];//报错本回答被提问者采纳
module.exports,exports,export和export default,import与require区别与联系原创
还在为module.exports、exports、export和export default,import和require区别与联系发愁吗,这一篇基本就够了!
一、首先搞清楚一个基本问题:
module.exports和exports是属于CommonJS模块规范!(不清楚commonjs?大神请这边逛一逛commonjs规范)
export和export default是属于ES6语法(不清楚ES6?大神请这边逛一逛ES6模块)!
同样import和require分别属于ES6和CommonJS!
二、知道属于哪一块的语法了还有一个明确点:
module.exports和exports、export和export default都是导出模块;
import和require则是导入模块。
所以现在就不要弄混了,module.exports导出对应require导入,export导出对应import导入。
喂!等等,怎么才说到module.exports导出对应require导入,export导出对应import导入,那还有exports和export default呢!?那我们继续。
三、module.exports和exports的区别与联系
讲到这里就不得不稍微提一下模块化:
Node应用由模块组成,采用CommonJS模块规范。
根据这个规范,每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。
CommonJS规范规定,每个模块内部,module
变量代表当前模块。这个变量是一个对象,它的exports
属性(即module.exports
)是对外的接口。加载某个模块,其实是加载该模块的module.exports
属性。
var x = 5;
var addX = function (value) {
return value + x;
};
module.exports.x = x;
module.exports.addX = addX;
上面代码通过module.exports
输出变量x
和函数addX
。
require
方法用于加载模块。
var example = require(‘./example.js‘);
console.log(example.x); // 5
console.log(example.addX(1)); // 6
看了刚刚这段commonjs规范上面的介绍可以知道以下区别与联系:
其实exports变量是指向module.exports,加载模块实际是加载该模块的module.exports
。这等同在每个模块头部,有一行这样的命令。
var exports = module.exports;
于是我们可以直接在 exports 对象上添加方法,表示对外输出的接口,如同在module.exports上添加一样。注意,不能直接将exports变量指向一个值,因为这样等于切断了exports与module.exports的联系。
三、export和export default的区别与联系
模块功能主要由:export
和import构成
。export
导出模块的对外接口,import
命令导入其他模块暴露的接口。
export其实和export default就是写法上面有点差别,一个是导出一个个单独接口,一个是默认导出一个整体接口。使用import
命令的时候,用户需要知道所要加载的变量名或函数名,否则无法加载。这里就有一个简单写法不用去知道有哪些具体的暴露接口名,就用export default
命令,为模块指定默认输出。
export可以这样写
// testA.js
var f = ‘Miel‘;
var name = ‘Jack‘;
var data= 1988;
export {f, name, data};
使用export
命令定义了模块的对外接口以后,其他 JS 文件就可以通过import
命令加载这个模块。
// main.js import {
f, name, data
} from ‘./testA‘;
export default可以这样写
// export-default.js
export default function () {
console.log(‘foo‘);
}
// 或者写成
function foo() {
console.log(‘foo‘);
}
export default foo;
// import-default.js
import customName from ‘./export-default‘;
customName(); // ‘foo‘
下面比较一下export default和export 输出。
// 第一组 export default function car() { // 输出 // ... } import car from ‘car‘; // 输入 // 第二组 export function car2() { // 输出 // ... }; import {car2} from ‘car2‘; // 输入
可以看到第一组是使用export default
,import
语句不需要使用大括号;第二组使用export
,对应的import
语句需要使用大括号,一个模块只能有一个默认输出,所以export default
只能使用一次。
四、import和require的区别与联系
看了上面其实已经清楚了,import和require是分别属于ES6和CommonJS的两种导入模块的语法而已。
以上是关于export 和 export default 之间的区别和 import的主要内容,如果未能解决你的问题,请参考以下文章
module.exports和exports export和export default
export default和export default defineComponent区别
module.exports 和 exports,export 和export default的区别
module.exports,exports,export和export default,import与require区别与联系
module.exports,exports,export和export default,import与require区别与联系