Node.js阶段学习笔记 5.0 --- 模块化思想

模块化

模块化规范分类:

  • 浏览器端:

    • AMD: requireJS require() define
    • CMD: seajs
  • 服务器端 (nodejs)

    • commonJS: require exports
  • ES6标准模块化规范 (vue里讲)

    • import export

    会熟练使用模块化规范ADM(浏览器端) 、commonJS(服务器端) 、import(ES6标准模块化)

基本概念

在nodejs中,应用由模块组成,nodejs中采用commonJS模块规范。

  1. 一个js文件就是一个模块
  2. 每个模块都是一个独立的作用域,在这个而文件中定义的变量、函数、对象都是私有的,对其他文件不可见。
  • 01-模块化的概念用于演示每一个模块都有自己单独的作用域

node中模块分类

  • 1 核心模块
    • 由 node 本身提供,不需要单独安装(npm),可直接引入使用 fs http path
  • 2 第三方模块
    • 由社区或个人提供,需要通过npm安装后使用
  • 3 自定义模块
    • 由我们自己创建,比如:tool.js 、 user.js

核心模块

  • fs:文件操作模块
  • http:网络操作模块
  • path:路径操作模块
  • url: 解析地址的模块
  • querystring: 解析参数字符串的模块
  • 基本使用:1 先引入 2 再使用
// 引入模块
const fs = require('fs');
const http = require('http')

第三方模块

  • 第三方模块是由 社区或个人 提供的
  • 比如:mime模块/art-template/jquery…
  • 基本使用:1 先通过npm下载 2 再引入 3 最后使用

用户自定义模块

  • 由开发人员创建的模块(JS文件)
  • 基本使用:1 创建模块 2 引入模块
  • 注意:自定义模块的路径必须以./获取../开头
// 加载模块
require('./a')     // 推荐使用,省略.js后缀!

require('./a.js')

模块的导入与导出

模块导入

  • 通过require("fs")来加载模块
  • 如果是第三方模块,需要先使用npm进行下载
  • 如果是自定义模块,需要加上相对路径./或者../,可以省略.js后缀,如果文件名是index.js那么index.js也可以省略。
  • 模块可以被多次加载,但是只会在第一次加载

模块导出

  • 在模块的内部,module变量代表的就是当前模块,它的exports属性就是对外的接口,加载某个模块,加载的就是module.exports属性,这个属性指向一个空的对象。
//module.exports指向的是一个对象,我们给对象增加属性即可。
//module.exports.num = 123;
//module.exports.age = 18;

//通过module.exports也可以导出一个值,但是多次导出会覆盖
module.exports = '123';
module.exports = "abc";

module.exports与exports

  • 注意:给 module.exports 赋值会切断与 exports 之间的联系

  • // 1. module.exports 和 exports 指向同一片空间`

    // 2. 导出的其实是 module.exports

  • 总结 : 以后使用 module.exports

console.log( module.exports === exports ) // ==> true

//1. 导出添加属性后的对象
module.exports.name = 'zs'
module.exports.age = 10
exports.name = 'zs'
exports.age =  10

//2. 赋值操作:不要使用 exports = {}
module.exports = {}
exports = {
  name: 'zs',
  age : 10
}

模块加载规则(以mime包为例)(主要是面试)

require模块加载的规则

  • 如果加载的模块是一个路径,表示加载的自定义模块,根据路径查找对应的js文件
  • 如果加载的模块是一个名字,不是一个路径,说明加载的是核心模块或者是第三方模块
  • 判断是否是核心模块,如果不是核心模块
  • 会在当前目录下查找是否有node_modules目录, 如果有
  • 在node_modules目录下查找mime这个文件夹
  • 找到mime文件夹下的package.json文件,找到main属性,模块的入口文件
  • 如果没有main,默认查找当前目录下的index.js文件
  • 如果没有找到对应的模块,回去上一层目录,继续查找, 一直找到根目录 C D E
  • 报错: can not find module xxx

CommonJS 规范参考文档


模块化改造hackerNews

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值