博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
node中 模块导入和导出的探究
阅读量:6982 次
发布时间:2019-06-27

本文共 2325 字,大约阅读时间需要 7 分钟。

我们在编写js过程中,经常会碰到 requrie和import的写法,也会看到export default,exports的写法,他们能不能混用呢,我们来探究一下

当前环境:

node版本 v9.6.1
操作系统 Mac

module

我们打印出module,结果如下

图片描述
图片描述

module.id 模块的识别符,通常是带有绝对路径的模块文件名。
module.filename 模块的文件名,带有绝对路径。
module.loaded 返回一个布尔值,表示模块是否已经完成加载。
module.parent 返回一个对象,表示调用该模块的模块。
module.children 返回一个数组,表示该模块要用到的其他模块。
module.exports 表示模块对外输出的值。

exports与module.exports

图片描述

图片描述
我们可以看到在模块中exports和module.exports 是同一个对象
就相当于,文件执行前默认执行了一下语句

let exports = module.exports;

export

var firstName = 'Michael';var lastName = 'Jackson';var year = 1958;export {firstName, lastName, year};

执行结果

图片描述

我们看到在node v9.6.1 版本中并不支持export,我们使用bable转译后看一下

clipboard.png

其实使用export,编译后还是使用的exports

export default

var firstName = 'Michael';var lastName = 'Jackson';export default firstName;export {lastName };

clipboard.png

关于node中模块导出结论

所以node中导出模块只会用到了module.exports,其他语法都只是一些包装而已

require

当modle.js为exports的形式时

module.js

var firstName = 'Michael';var lastName = 'Jackson';exports.default = firstName;exports.lastName = lastName;

index.js

const test4 = require('./modle');console.log(test4);

结果

{ default: 'Michael', lastName: 'Jackson' }

当modle.js为export的形式时

module.js

var firstName = 'Michael';var lastName = 'Jackson';export default firstName;export lastName = lastName;

index.js

const test4 = require('./modle');console.log(test4);

结果:

{ default: 'Michael', lastName: 'Jackson' }

结论

require接受到的是module.exports对象

当你使用export default firstName时,转化成了exports.default = firstName;
所以无论你使用什么样的形式导出模块,对于require来说都是一样的

import

当modle.js为export的形式时

var firstName = 'Michael';var lastName = 'Jackson';export default firstName;export { lastName };

index.js

import test6 from './module';console.log(test6);

结果

Michael

这里就和require不一样了,import默认导出的是 export default

index.js

import * as test6 from './module';console.log(test6);

结果:

{ default: 'Michael', lastName: 'Jackson' }

这时候导出的结果才和require一致

当import test6 from './module'是,默认会查找default,假如没有export default那么 test6为undefined,那么要导出lastName就得使用

import { lastName } from './module';

当modle.js为exports的形式时

var lastName = 'Jackson';var firstName = 'Michael';exports = { lastName , firstName };

index.js

import test7 from './module';console.log(test7);

结果

{ firstName: 'Michael', lastName: 'Jackson' }

结论

导出模块可以使用 export和exports,引入模块可以使用 import和require,但两两可以交叉使用,

import/export 最终都是编译为 require/exports 来执行的
只是export 会有一个default的不同,但一般来说export对应import,exports对应require。

转载地址:http://cltpl.baihongyu.com/

你可能感兴趣的文章
WinForm连接数据库
查看>>
大快网站:如何选择正确的hadoop版本
查看>>
hadoop需要哪些技术支持
查看>>
赵童鞋带你入门PHP(六) ThinkPHP框架入门
查看>>
Java中断机制
查看>>
JS笔记(20): JS中的同步编程和异步编程
查看>>
Vue +Element Ui 使用Upload组件实现多图片上传
查看>>
那几个题(没懂的地方留言)
查看>>
如何改变UITableViewCell的选中样式(颜色)?storyboard上cell的selection不可用?
查看>>
Ubuntu 怎么增加根目录 大小
查看>>
Spring Cloud微服务分布式云架构—集成项目简介
查看>>
SQLServer之删除存储过程
查看>>
盒马鲜生颠覆传统生鲜市场的胜算几何?
查看>>
“无人化时代”正在逼近,网友:再不努力就无工可打啦!
查看>>
【Node】常用基础 API 整理
查看>>
传神成进博会唯一指定智能翻译硬件提供商 力助无障碍沟通
查看>>
微信小程序实现slideUp、slideDown滑动效果及点击空白隐藏功能示例
查看>>
Java程序员须知:分布式微服务为什么很难?
查看>>
SQLServer之创建唯一聚集索引
查看>>
好程序员web前端技术之CSS3过渡
查看>>