前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >node.js的模块化及reqire与exports释义

node.js的模块化及reqire与exports释义

作者头像
章鱼喵
发布2018-08-02 15:29:38
4010
发布2018-08-02 15:29:38
举报
文章被收录于专栏:codingcoding

模块引入

模块化是node.js的核心概念,node.js对于服务端的操作都是封装成一个个独立的核心模块,以文件读写模块File System为例:

代码语言:javascript
复制
// 引入文件操作模块
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())
})

执行结果:

代码语言:javascript
复制
☁  01 [master] ⚡ node 07.js
云想衣裳花想容
春风拂槛露华浓

node.js模块

require

node.js是经由require关键字引入模块,模块分为:自带的核心模块,自定义的模块。我们以自定义模块为例解析require的作用:

在同级目录下新建4个文件:

代码语言:javascript
复制
☁  custom_module [master] ⚡ tree
.
├── 01.js
├── 02.js
├── 03.js
├── 04.js

01.js

代码语言:javascript
复制
let poem = '云想衣裳花想容'
console.log(poem)

require('./02.js')

02.js

代码语言:javascript
复制
let poem = '春风拂槛露华浓'
console.log(poem)

require('./03.js')

03.js

代码语言:javascript
复制
let poem = '若非群玉山头见'
console.log(poem)

require('./04.js')

04.js

代码语言:javascript
复制
let poem = '会向瑶台月下逢'
console.log(poem)

01.js引入了02.js, 02.js引入了03.js, 03.js引入了04.js,这四个文件都有一个同名变量poem,让我们运行一下,看同名变量是否会被覆盖

代码语言:javascript
复制
☁  custom_module [master] ⚡ node 01.js
云想衣裳花想容
春风拂槛露华浓
若非群玉山头见
会向瑶台月下逢

由此可见,不同的模块有不同的命名空间,即使变量名称一致也不会相互污染。以上的侄子在require文件时,就直接执行此文件的内容,但如果我们是想调用模块里面的数据或方法呢?

此时,就需要使用exports将模块的变量/方法暴露出来,以供引用方调用。

exports

在node中,一个文件就是一个模块。实际上,为了让各个文件里的变量互不干扰,node让每个模块都放在一个闭包中执行,这样实现的模块的隔离。而要让模块间相互联系,就需要暴露变量。而exports就是负责对外暴露变量

05.js

代码语言:javascript
复制
let myExports = require('./06.js');
console.log(myExports);
console.log(myExports.name);
let name = '地球三体组织'
let goal = '消灭人类暴政,世界属于三体'
console.log(myExports.goal(name, goal));

06.js

代码语言:javascript
复制
let name = '三体'

exports.name = name

exports.goal = function (name, goal) {
    return name + '的目标是:' + goal
}

执行结果:

代码语言:javascript
复制
☁  custom_module [master] ⚡ node 05.js
{ name: '三体', goal: [Function] }
三体
地球三体组织的目标是:消灭人类暴政,世界属于三体

由此可知,exports是一个对象,如果模块要对外暴露变量,就需要将变量赋予作为exports的属性

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.07.10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 模块引入
  • require
  • exports
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档