带你入坑Nodejs(六)

1,856 阅读3分钟

这是我参与8月更文挑战的第12天,活动详情查看:8月更文挑战

Node中的模块化

什么是模块化

  • js设计之初只是为了实现表单验证这样的简单功能,没设计模块化方案,所以js天生不支持模块化
  • 不支持模块化简单来说就是在一个js文件内不能引入其他js文件
  • 为了让js支持模块化,一些大神自己编写底层库文件,让js开始支持模块化
  • js模块化规范有四种标准: AMD CMD CommonJS ES6
  • Node属于CommonJS标准
  • 使用模块化可以很好的解决变量、函数名冲突问题,也能灵活的解决文件依赖问题

全局作用域和局部作用域

局部作用域(模块的作用域):

  • 一个js文件就是一个模块
  • 在一个js文件中定义的属性(变量、常量)和方法默认都只能在当前js文件中使用

案例: 创建index.js、user.js两个模块。 user.js 模块中定义属性和方法,index.js导入user.js模块

  1. 创建 users.js 文件
//在一个js文件中定义的变量、常量、方法等都只能在该文件中使用
//这就叫局部作用域
//一个js文件就是一个模块
const name = 'zs';
const person = {
    name: '王重阳',
    age: 50,
    skill: '九阴真经'
}

function show () {
    console.log('我叫王大锤,万万没想到我参加了声临其境');
}
  1. 创建index.js文件,加载 users.js
// 局部作用域测试:
// 加载 users.js --- 加载自定义模块时,必须使用路径形式
const user = require('./users.js');

console.log(user);  // 结果为 {}

show();   // 结果是 未定义的show

console.log(person.skill);

执行结果:

1550460016500.png

全局作用域:

  • 在js文件中声明的属性和方法如果都挂载到global对象下;当其他js文件导入该模块后,就能使用该模块下的属性和方法了。

案例: 创建index.js、game.js两个模块。 game.js 模块中定义属性和方法并挂载到global对象下,index.js导入game.js模块

  1. 创建 game.js 文件,并将数据挂载到 global对象下
//将变量、对象、方法直接挂载到global对象上,
//就变成了全局作用域
global.name = '王者荣耀';

global.obj = {
    name: 'lol',
    company: 'tencent',
    type: 'moba'
}

global.sayHi = function () {
    console.log('LOL 挺好玩的...');
}
  1. 在 index.js 文件中加载 game.js 文件
//全局作用域测试:
require('./game.js');
console.log(global.name);

console.log(global.obj.name);

global.sayHi();

执行结果: 1550460396087.png

module.exports导出属性和方法

  • 将变量、对象、函数等挂载到global对象上并不推荐,因为容易造成变量污染。
  • 推荐使用 module.exports 导出模块中定义好的变量、对象、方法
  • 使用require加载(导入)模块后,就能使用模块中定义好的变量、对象、方法了

案例: users.js中定义变量、对象、方法,最后使用 module.exports 导出

const name = 'zs';
const person = {
    name: '王重阳',
    age: 50,
    skill: '九阴真经'
}

function show () {
    console.log('我叫王大锤,万万没想到我参加了声临其境');
}

//使用 module.exports 导出定义好的变量、对象、方法
module.exports = {
    name,
    person,
    show
}

index.js中加载users.js模块

//使用路径方式加载第三方模块

//通过module.exports导出的变量、对象、方法以整体的对象

//像是保存到了 user 变量中

const user = require('./users.js');

console.log(user.name);

console.log(user.person.name);

user.show();

执行结果:

1550461692072.png 下文讲 node 和数据库链接操作数据库

点赞支持、手留余香、与有荣焉,动动你发财的小手哟,感谢各位大佬能留下您的足迹。

往期精彩推荐

前端万字面经——基础篇

前端万字面积——进阶篇

聊一聊前端开发中最常用的两种管理工具

聊聊让人头疼的正则表达式

手摸手带你肝nodejs(一)

获取文件blob流地址实现下载功能

手摸手带你肝 nodejs (二)

git 实现自动推送

手摸手带你肝nodejs(三)

手摸手带你肝nodejs(四)

手摸手带你肝nodejs(五)