node.js的模块化及reqire与exports释义
时间:2022-06-05
本文章向大家介绍node.js的模块化及reqire与exports释义,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
模块引入
模块化是node.js的核心概念,node.js对于服务端的操作都是封装成一个个独立的核心模块,以文件读写模块File System
为例:
// 引入文件操作模块
let fs = require('fs')
let filePath = './data/清平调.md'
// 覆盖式写入数据
fs.writeFile(filePath, "云想衣裳花想容n", function (error) {})
// 追加写入
fs.appendFile(filePath, "春风拂槛露华浓n", function (error) {})
// 读取数据
fs.readFile(filePath, function (error, data) {
console.log(data.toString())
})
执行结果:
☁ 01 [master] ⚡ node 07.js
云想衣裳花想容
春风拂槛露华浓
node.js模块
require
node.js是经由require
关键字引入模块,模块分为:自带的核心模块,自定义的模块。我们以自定义模块为例解析require
的作用:
在同级目录下新建4个文件:
☁ custom_module [master] ⚡ tree
.
├── 01.js
├── 02.js
├── 03.js
├── 04.js
01.js
let poem = '云想衣裳花想容'
console.log(poem)
require('./02.js')
02.js
let poem = '春风拂槛露华浓'
console.log(poem)
require('./03.js')
03.js
let poem = '若非群玉山头见'
console.log(poem)
require('./04.js')
04.js
let poem = '会向瑶台月下逢'
console.log(poem)
01.js
引入了02.js
, 02.js
引入了03.js
, 03.js
引入了04.js
,这四个文件都有一个同名变量poem
,让我们运行一下,看同名变量是否会被覆盖
☁ custom_module [master] ⚡ node 01.js
云想衣裳花想容
春风拂槛露华浓
若非群玉山头见
会向瑶台月下逢
由此可见,不同的模块有不同的命名空间,即使变量名称一致也不会相互污染。以上的侄子在require
文件时,就直接执行此文件的内容,但如果我们是想调用模块里面的数据或方法呢?
此时,就需要使用exports
将模块的变量/方法暴露出来,以供引用方调用。
exports
在node中,一个文件就是一个模块。实际上,为了让各个文件里的变量互不干扰,node让每个模块都放在一个闭包中执行,这样实现的模块的隔离。而要让模块间相互联系,就需要暴露变量。而exports
就是负责对外暴露变量
05.js
let myExports = require('./06.js');
console.log(myExports);
console.log(myExports.name);
let name = '地球三体组织'
let goal = '消灭人类暴政,世界属于三体'
console.log(myExports.goal(name, goal));
06.js
let name = '三体'
exports.name = name
exports.goal = function (name, goal) {
return name + '的目标是:' + goal
}
执行结果:
☁ custom_module [master] ⚡ node 05.js
{ name: '三体', goal: [Function] }
三体
地球三体组织的目标是:消灭人类暴政,世界属于三体
由此可知,exports
是一个对象,如果模块要对外暴露变量,就需要将变量赋予作为exports
的属性
- 【专知-关关的刷题日记17】Leetcode 268. Missing Number
- 【专知-关关的刷题日记18】Leetcode 35. Search Insert Position
- [接口测试 - http.client篇] 15 常用API说明及基本的示例
- [接口测试 - http.client篇] 14 源码初探及其工作机制分析
- 【专知-关关的刷题日记19】Leetcode 118. Pascal's Triangle
- 每周学点大数据 | No.3算法设计与分析理论
- HDU 1874 畅通工程续【Floyd算法实现】
- 接口测试 | 21 基于flask弄个restful API服务出来
- 数论部分第二节:埃拉托斯特尼筛法 埃拉托斯特尼筛法
- [接口测试 -基础篇] 20 用flask写一个简单server用于接口测试
- 接口测试 | urllib篇 19 urllib基本示例
- 接口测试 | urllib篇 18 urllib介绍
- 【专知-Deeplearning4j深度学习教程01】分布式Java开源深度学习框架DL4j安装使用: 图文+代码
- .Net Core Runtime安装说明
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 一起来学matlab-matlab学习笔记10 10_2一般操作符和数据显示格式
- 一起来学matlab-matlab学习笔记10 10_3关系运算符和逻辑运算符
- 一篇文章学懂Shell脚本,最简明的教程在这里
- 一起来学matlab-matlab学习笔记10 10_5 通用字符串操作和比较函数
- 一个案例彻底弄懂如何正确使用 mysql inndb 联合索引
- 一起来学matlab-matlab学习笔记11 11_2 高维数组处理和运算 squeeze, ind2sub, sub2ind
- matlab结构体 rmfield,arrayfun,structfun,struct2cell,cell2struct
- PHP函数参数传递方法的具体改进技巧
- matlab学习笔记11_3 高维数组处理 filp, shiftdim, size, permute, ipermute
- 看完这篇文章,你的Linux基础就差不多了
- jzy3D从入门到弃坑
- git丢弃本地修改的所有文件(新增、删除、修改)
- Jmetal设置Solution Variables
- git log 查看某文件的修改历史
- 进程和线程的概念、区别和联系