【nodejs】import、export、exports、module.exports
1、import 和 export(ES6特性)
目录结构
export_file.js
export const myNumbers = [1, 2, 3, 4];
const animals = ['Panda', 'Bear', 'Eagle']; // Not available directly outside the moduleexport function myLogger() {console.log(myNumbers, animals);
}export class Alligator {constructor() {// ...}
}let anotherNum = [3, 2, 1];
export { anotherNum, myLogger as Logger }
import_file.js
import * as Utils from './export_file.js';console.log(Utils)console.log(Utils.Logger())
console.log(Utils.myLogger())
package.json:这个文件很关键,表示import的是一个module,不然会报错
{"type": "module"
}
运行结果
也可以把import的方式换成
import {myLogger, Logger, myNumbers as num} from './export_file.js';console.log(num)console.log(Logger())
console.log(myLogger())
输出如下
如果把目录结构改成:export单独放,package.json和import文件一起
一样可以正常运行
如果把import单独放
则不能正常运行,会报错MODULE_NOT_FOUND
因此package.json是为了把import_file.js变成一个module,才能使用import
2、exports和require
用require导入一个module,不需要import_file.js自己是一个module,而exports本身将export_file.js以module的形式导出
目录结构
export_file.js
const getName = () => {return 'Jim';
};const getLocation = () => {return 'Munich';
};const dateOfBirth = '12.01.1982';exports.getName = getName;
exports.getLocation = getLocation;
exports.dob = dateOfBirth;
import_file.js
const user = require('./export_file');console.log(user.getName())
console.log(user.getLocation())
console.log(user.dateOfBirth)
console.log(user.dob)console.log(`${user.getName()} lives in ${user.getLocation()} and was born on ${user.dob}.`
);
输出
exports的方式改成如下也可以
exports.getName = () => {return 'Jim';
};exports.getLocation = () => {return 'Munich';
};exports.dob = '12.01.1982';
import中也可以指定导入哪些
const {getName, getLocation, dob} = require('./export_file');console.log(getName())
console.log(getLocation())
console.log(dob)console.log(`${getName()} lives in ${getLocation()} and was born on ${dob}.`
);
3、module.exports和require
module.exports用于只导出一个,比如一个class
目录结构不变
export_file.js
class User {constructor(name='Jim', age='Munich', dob='12.01.1982') {this.name = name;this.age = age;this.dob = dob;}getUserStats() {return `Name: ${this.name}Age: ${this.age}DateOfBirth: ${this.dob}`;}
}module.exports = User;
import_file.js,将export_file作为整体导入,即得到导出的class
const User = require('./export_file');let myUser = new User();console.log(myUser.getUserStats()
);
运行
也可以用的跟之前exports一样,导出一个dict,里面包含多项内容
module.exports = {getName: () => {return 'Jim';},getLocation: () => {return 'Munich';},dob: '12.01.1982',
};
import 仍然是
const {getName, getLocation, dob} = require('./export_file');console.log(`${getName()} lives in ${getLocation()} and was born on ${dob}.`
);
可以看到跟之前的结果是一样的
exports 和 module.exports 本质上是指向一个地方
比如下面三句是等价的
module.exports = {dob: '12.01.1982',
};exports.dob = '12.01.1982';module.exports.dob = '12.01.1982';
如果输出module来看
最终都会将dob加入到module的exports里面
但需要注意,在我们使用module.exports = {dob: '12.01.1982'};
,是直接将一个object赋值给exports,这将会覆盖exports里的其他内容
【nodejs】import、export、exports、module.exports相关推荐
- 【iOS】使用SQLite3的时候Swift3.、XCode8报错:Unsupported architecture - 'arm/arch.h'file not found - Could not
[iOS]使用SQLite3的时候Swift3..XCode8报错:Unsupported architecture - 'arm/arch.h'file not found - Could not ...
- 【数据分析】图书馆数据-02重命名、索书号、分组
[数据分析]图书馆数据-01建表 [数据分析]图书馆数据-02重命名.索书号.分组 [数据分析]图书馆数据-03直方图展示借书数量与借书人数之间的关系 [数据分析]图书馆数据-04借阅情况聚类挖掘 [ ...
- 【Redis】14.Redis高级数据类型Bitmaps、HyperLogLog、GEO
[Redis]14.Redis高级数据类型Bitmaps.HyperLogLog.GEO Bitmaps:用比特位进行快速的状态统计 Bitmaps基本操作 Bitmaps不是一个新的数据类型,而是s ...
- 【数据库】第一章 数据库的分类、SQL、数据库、表和表记录的常用操作
[数据库]第一章 数据库的分类.SQL.数据库与表的常用操作 文章目录 [数据库]第一章 数据库的分类.SQL.数据库与表的常用操作 一.数据库的分类 1.关系型数据库 2.非关系型数据库 3.MyS ...
- arcgis 删除图形重复折点_【干货】ArcGIS中画环状图斑、挑子区及消除图斑重复区域...
原标题:[干货]ArcGIS中画环状图斑.挑子区及消除图斑重复区域 ArcGIS的Editor菜单下,有许多功能我们不经常用,但是在如果仔细的研究下就会发现,其实许多功能是相当实用的. 1.绘制环状图 ...
- 【解决方案】SpringCloud项目优雅发版、部署
[解决方案]SpringCloud项目优雅发版.部署 参考文章: (1)[解决方案]SpringCloud项目优雅发版.部署 (2)https://www.cnblogs.com/fonxian/p/ ...
- 【转】 C#学习笔记14——Trace、Debug和TraceSource的使用以及日志设计
[转] C#学习笔记14--Trace.Debug和TraceSource的使用以及日志设计 Trace.Debug和TraceSource的使用以及日志设计 .NET Framework 命名空 ...
- 【操作系统】操作系统的发展历程——手工阶段、批处理阶段、分时操作系统、实时操作系统
[操作系统]操作系统的发展历程--手工阶段.批处理阶段.分时操作系统.实时操作系统 说明:本系列用于记录学习操作系统时的知识点,主要参考资料:王道考研. 不骗各位,博主真的是小菜鸡,如有纰漏还请指出. ...
- 【原创】开源OpenIM:轻量、高效、实时、可靠、低成本的消息模型
[原创]开源OpenIM:轻量.高效.实时.可靠.低成本的消息模型 1.内容概述 一套完整IM系统中,除开基本的业务设计,消息模型的设计是其中最为关键的一环,它关系到整个IM系统的可靠性.高效性.稳定 ...
最新文章
- 反编译得到的java文件好多错误 val$query什么意思_这部分代码有错么?一直提示输入框$(#msg).val()得到的值未定义...
- leetcode算法题--LRU缓存机制
- JVM内存压缩开启/不开启各占几个字节
- OpenCV学习(14) 细化算法(2)
- 终端短路和终端开路的无耗传输线的输入阻抗和导纳
- 计算机通信网络学什么软件,通信工程专业需要用到的电脑软件有哪些
- 华为数通NA-NP学习笔记(个人精简)
- idea更改页面背景颜色设置为护眼颜色
- Bytes和bits的区别(字节和位的区别)
- DOTA数据集应用于Yolo-v4(-Tiny)系列2——使用Pytorch框架的Yolov4(-Tiny)训练与推测
- Linux0号进程,1号进程,2号进程
- 求大神指导,海康威视服务器装系统装到这一步装不走了,怎么搞
- mysql表别名不加as_数据库别名AS区别
- DNA计算 与 肽展公式 推导 AOPM-A 变胸腺苷, AOPM-O尿胞变腺苷, AOPM-P尿胞变鸟苷, AOPM-M鸟腺苷的 S形螺旋纹 血氧峰 触发器分子式 严谨完整过程
- python爬虫是数据挖掘吗_爬虫属于数据挖掘 python为什么叫爬虫
- 计算机视觉的应用,计算机视觉新手指南
- 报错:Module parse failed: ‘return‘ outside of function (4:1) You may need an appropriate loader
- 【问题3】:Kaggle练习题《房价预测》----分别采用的岭回归,随机森林,bagging模型,AdaBoost,XgBoost等。
- c语言判断真假,C语言中的真假值
- matlab使用load函数读取txt数据时,出现锘? xxxxx 。的解决办法