nodejs-模块化

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_45674894/article/details/102724198

模块化

基本概念

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

  1. 一个js文件就是一个模块
  2. 每个模块都是一个独立的作用域,在这个而文件中定义的变量、函数、对象都是私有的,对其他文件不可见,引入后会报错。

node中模块分类

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

点击了解npm的基本使用

核心模块

常见的核心模块有:

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

第三方模块

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

用户自定义模块

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

require('./a.js')  //不省略.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

  • exportsmodule.exports 的引用
  • 注意:给 module.exports 赋值会切断与 exports 之间的联系
    • 1 直接添加属性两者皆可
    • 2 赋值操作时,只能使用 module.exports
console.log( module.exports === exports ) // ==> true

// 等价操作
module.exports.num = 123
exports.num = 123

// 赋值操作:不要使用 exports = {}
module.exports = {}

模块查找规则

核心模块

  • 直接去node安装包中找

第三方模块(以mime包为例)

  • 先基于当前文件模块所属目录找 node_modules 目录
  • 如果找到,则去该目录中找 mime 目录
  • 如果找到 mime 目录,则找该目录中的 package.json 文件
  • 如果找到 package.json 文件,则找该文件中的 main 属性
  • 如果找到 main 属性,则拿到该属性对应的文件路径
  • 如果找到 mime 目录之后
  • 发现没有 package.json
  • 或者 有 package.json 没有 main 属性
  • 或者 有 main 属性,但是指向的路径不存在
  • 则 node 会默认去看一下 mime 目录中有没有 index.js index.node index.json 文件
  • 如果找不到 index 或者找不到 mime 或者找不到 node_modules
  • 则进入上一级目录找 node_moudles 查找规则同上
  • 如果上一级还找不到,继续向上,一直到当前文件所属磁盘根目录
  • 如果最后到磁盘根目录还找不到,最后报错:can not find module xxx

自定义模块

  • 直接相对于当前文件去找

猜你喜欢

转载自blog.csdn.net/weixin_45674894/article/details/102724198