【NodeJS 教学】10分钟学会编写和引用第一个NodeJS模块 (实操module.exports, exports, require语句) | Create 1st NodeJS Module
✅ JavaScript相关书籍:
1:The Definitive Guide: Master the World's Most-Used Programming Language - 7th Edition (强烈推荐👍)
https://amzn.to/31s30uH
☕ ☕ ☕ 如果觉得这些教学对你有用,那就请我喝杯咖啡吧!
我会继续为你创作更多免费的编程教学视频,让你轻松入门编程。
✅ https://bit.ly/3kCOpFK
✅ (免费) JavaScript教程系列:
https://bit.ly/310cHle
✅ 更多精彩的JavaScript入门课程:
http://bit.ly/js-for-beginners
✅(通告)”Codetisan 自学编程社区“ 已经正式开通啦,三人行必有我师,同学们再也不用独自一人闷头自学编程了,快去社区里和其他小伙伴们互动吧!
▶︎ https://bit.ly/2AHylzN
🔆订阅我的YouTube频道,让你从一个0基础编程的菜鸟快速成为编程大师!🔆
http://bit.ly/2TBkXo1
▶︎ 文轩解码更精彩的平台 ◀︎
‣‣ Blogger :https://bit.ly/2yMz0PC
‣‣ Twitter: https://bit.ly/2R74FS1
‣‣ Facebook: https://bit.ly/35crcmz
‣‣ Instagram: https://bit.ly/2KH6Wjw
‣‣ Github: https://bit.ly/2SHtsx4
#nodejs教学 #编程入门 #javascript
文字内容:
Hi 大家好 我是文轩
欢迎再次收看文轩解码
今天的视频我们会专注在怎么编写和使用NodeJS模块
看完这集视频如果有疑问的话
欢迎去到自学编程社区里提问
我们一起讨论交换意见
NodeJS Module可以用三种方法被引入
在前两集我们已经讨论过了
那就是NodeJS自带的核心内置模块
和NPM第三方模块
今天要和你分享的是程序员怎么自定义NodeJS模块
首先我来问一个问题
为什么我们需要模块
模块化源代码后能为我们带来什么好处呢?
试想想一个巨无霸网购平台
在没有被模块化的情况下
一旦某个功能出现bug
程序员就必须在几百万行的代码里深挖和确认哪里出现了问题
用这种方法除错
不但耗时耗力
还直接导致后期维护成本直线上升
要解决这个问题
巨无霸网购平台就必须被模块化
把大问题变成个别的小问题
模块可以按功能切分
像登录功能转换成登录模块
付款功能装换成付款模块
让每个模块都独立运营
模块功能最终会通过接口对外开放
让程序统一调用
统一调用模块
比从零开始编写一个功能要快得多
程序里也不会在出现重叠的源代码
这大大降低了程序出错的风险
将程序模块化还有一个好处
那就是
我可以随时升级或者替换掉某个模块的源代码
只要对外开放的接口不变
模块内部的代码
我想怎么改
就怎么改
完全不影响全局
功能被模块化后
如果某个功能
像登录功能出错
程序员就去对应的登录模块debug
而不是纵横几百万行代码就为了debug一个小问题
这对后期维护起到很关键的作用
不管是那个程序员接手
他都能很快上手维护现有的源代码
这样的模式
就能大大的减低程序后期维护的成本
最终也能让程序员把专注力和精力
从维护老代码转向研发新功能
接下来实操的环节
我会给你演示怎么编写NodeJS模块
在编写完后要怎么引入这个NodeJS模块
你准备好了吗
准备好了那我们马上进入实操的环节
我们先创建一下今天的工作目录
今天的工作目录是episode07-第七集
cd至工作目录
然后创建第一个文件叫app.js
你可以去到File>New File这里创建新文件
也可以直接在Terminal输入
code app.js直接创建app.js
执行这行命令会让VS Code编辑器打开app.js
好的
那现在我们开始编写代码
接下来
我们会编写一个简易版计算机
这个简易版计算机里有标准的加减乘除功能
我先演示把加减乘除的功能都集成在app.js文件里
模拟一个巨无霸程序
之后我会把这些加减乘除功能模块化
让app.js通过模块引入
统一调用简易版计算机里的功能
先来定义加法的function
function
函数名是add
小括号
大括号
加法是两个数值的相加
所以我们的add函数需要有两个参数
代表两个数值
我们叫它num1和num2
最后在函数体里输入return num1加num2
来返回num1和num2相加的结果
再定义一个减法函数
这个函数也需要两个参数
num1和num2
最后在函数体里返回num1减num2的结果
先定义这两个函数
接下来我们调用一下这两个函数
先创建一个变量
用来储存add函数返回的结果
let addResult
等于
然后调用add函数
第一个参数输入1
第二个参数输入2
接着我们用console.log打印出1加2的结果
我们来保存一下代码
然后执行app.js
嗯
1 + 2 是等于3
我们的代码没问题
能正常运行
假设另一个NodeJS程序需也需要加减的功能
如果没有模块机制
那程序员就只能把app.js里的
add和subtract函数复制到server.js里
这样就会出现我们在前面说的代码重叠
同样的代码
却被复制到多处
如果将来要修改里面的逻辑
那将会是个噩梦
要避免这个问题
我们需要将app.js里的add和subtract函数模块化
那样app.js和server.js才能共享这两个函数
好的
现在我们来创建第一个模块
先创建一个新文件
文件名是calculator.js
现在去到app.js里
然后把add和subtract函数剪切至calculator.js
如果现在我们执行app.js
它肯定会报错
因为add函数已经不存在了
我们来测试一下
嗯
这里显示add函数没被定义的错误
是对的
因为add函数已经被挪到calculator.js里了
要引入calculator.js里的add函数
我们需要使用require语句
这就像之前我们引入http和fs模块一样
都要使用require语句
先创建一个常量保存require语句返回的object
const
calculator
等于
require
小括号
在小括号里我们需要提供calculator.js文件的路径
我们在这里输入
点
点代表当前目录
然后斜杠
calculator.js
这行的意思是让NodeJS从当前目录里的calculator.js文件
引入其对外开放的功能
我们打印一下calculator常量
看看它返回些什么
嗯
这里显示一个空object
我们刚才确实用require语句引入了calculator.js
为什么没看见add和subtract函数呢
这是因为calculator.js里的函数是不会自动暴露或者被输出的
我们需要明确告诉NodeJS哪一个函数需要被输出
那样才能被其他程序引入和调用
要输出这两个函数
我们必须使用module.exports语句
像这样
module.exports
等于
然后是要输出的函数名
add
保存代码
然后查执行app.js查看calculator常量
嗯
现在我们能看见add函数被引入了
那subtract函数怎么办
难道我们只能输出一个函数吗
当然不是
想要同时输出多个函数
是可以的
只需要改一下module.exports语句就可以了
module.exports其实在一开始是一个空object
我们可以往里面添加新数据
就像我们在普通object里插入新数据那样
需要提供一对key-value (键值对)
我们可以像这样
往module.exports object里插入新数据
点
add
这行的意思是
把add函数赋予module.exports object里的add属性
接着我们再把subtract函数也添加至module.exports的object里
module
点
exports
点
subtract
等于
subtract
好
现在保存一下代码
然后执行app.js
看看这两个函数是不是被输出了
嗯
add 属性里有add函数
subtract 属性里有subtract函数
calculator模块里的函数全都被输出了
也能在app.js里被引入
现在我们可以开始调用calculator模块里的add函数
正确的调用语句是calculator.add
所以我们需要在add前面添加calculator
点
保存一下代码
然后再执行app.js
嗯
现在我们成功调用calculator模块里的add函数了
我们尝试用同样的方式在server.js也引入calculator模块
看看能不能调用subtract函数
先引入calculator模块
然后计算5减2
最后打印一下结果
嗯
答案是对的
那就证明了我们的模块功能能正常输出和被引入调用
最后我再教你两个输出模块功能小技巧
先切换到calculator模块
如果我们需要输出很多函数
重复输入module.exports还是挺麻烦的
所以NodeJS就给我们提供了一个便利
那就是直接输入exports.add
exports.subtract
把module省略掉
那我们现在来执行一下app.js
嗯
换了新的语句 程序能正常运行
还有另外一种方法
那就是还是输入module.exports
但是这一次只输入一次
我会直接把一个object赋予module.exports
然后在大括号里输入两对key value(键值对)
像这样
如果key和value的字面一样
我还能将它近一步简化
那就是把key删除
这个语句和之前的语句都能达到同样的效果
但这个比之前的精简
执行一下app.js
确认加法是对的
嗯
加法是对的
在看看server.js
确认一下减法
嗯
结果也是对的
好的
现在我给你布置一个小任务
那就是把剩下的乘法和除法函数都补上
完成任务后可以把你的作品分享到自学编程社区里
让大家互相学习
你可以把代码上传到Github
或者简单的截个图都可以
希望今天的视频能启发你对NodeJS模块的制作
也希望有一天你能编写出一个属于自己的开源模块
造福NodeJS生态
好的
今天我就分享到这里
有疑问的话
可以去下面的留言区或者自学编程社区里提问
那我们下集见
see you next time
bye bye!
Comments
Post a Comment