Node 模块

Node 模块

概述

将一个复杂的程序文件依据一定规则(规范)拆分成多个文件的过程称之为模块化。

其中拆分出的 每个文件就是一个模块 ,模块的内部数据是私有的,不过模块可以暴露内部数据以便其他模块使用。

模块化优点:

  • 防止命名冲突。
  • 高复用性。
  • 高维护性。

使用

方式一:module.exports

定义moduleA.js

function sayHello() {
  console.log("hello");
}

// 使用module.exprots暴露数据
module.exports = sayHello;

使用

// 使用require引入模块
const sayHello = require("./moduleA.js");
sayHello();

定义moduleA.js

const user = {
  name: "小明",
  age: 18,
  sayHello: function () {
    console.log("hello");
  },
};

module.exports = user;

使用

const user = require("./moduleA.js");
user.sayHello();
console.log(user.name);
console.log(user.age);

方式二:exports

定义moduleC.js

// 使用exports暴露数据
exports.sayHello = function () {
  console.log("hello");
};
exports.user = {
  name: "小明",
  age: 18,
};

使用

const { sayHello, user } = require("./moduleC.js");
sayHello();
console.log(user.name);
console.log(user.age);

目录模块

在CommonJS中,我们可以使用目录作为模块,这被称为目录模块。目录模块的作用是将一组相关的模块组织在一起,方便管理和使用。

新建moduleD目录,并在其中新建index.js文件。

index.js

const user = {
  name: "小花",
  age: 28,
  sayHello: function () {
    console.log("hello");
  },
};
module.exports = user;

使用

const user = require("./moduleD");
user.sayHello();
console.log(user.name);
console.log(user.age);

package.json配置

如果导入的路径是个文件夹,会先检查文件夹中是否存在 package.json 文件中 main 属性对应的文件,如果存在则导入,如果不存在则报错。

如果 main 属性不存在,或者 package.json 不存在,则会尝试导入文件夹下的 index.jsindex.json ,如果还是没找到,就会报错。

moduleD 目录中新建 package.json文件,并定义 main 属性。
package.json

{
  "main": "./my.js"
}

my.js

const user = {
  name: "小白",
  age: 38,
  sayHello: function () {
    console.log("hello");
  },
};
module.exports = user;

使用

const user = require("./moduleD");
user.sayHello();
console.log(user.name);
console.log(user.age);

引入模块的基本流程

  1. 将相对路径转为绝对路径,定位目标文件。
  2. 缓存检测。
  3. 读取目标文件代码。
  4. 包裹为一个函数并执行(自执行函数)。通过 arguments.callee.toString() 查看自执行函数。
  5. 缓存模块的值。
  6. 返回 module.exports 的值。

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值