NodeJS模块

一、什么是模块

1.1、浏览器开发中的模块

在浏览器开发中为了避免命名冲突, 方便维护等等
我们采用类或者立即执行函数的方式来封装JS代码,来避免命名冲突和提升代码的维护性
其实这里的一个类或者一个立即执行函数就是浏览器开发中一个模块

  • 存在的问题:
    没有标准没有规范(有人用类,有人用函数定义模块,未规定模块中哪些可以暴露给外界)
1.2、NodeJS开发中的模块

NodeJS采用CommonJS规范实现了模块系统

二、CommonJS规范

CommonJS规范规定了如何定义一个模块, 如何暴露(导出)模块中的变量函数, 以及如何使用定义好的模块

  • 在CommonJS规范中一个文件就是一个模块
  • 在CommonJS规范中每个文件中的变量函数都是私有的,对其他文件不可见的
  • 在CommonJS规范中每个文件中的变量函数必须通过exports暴露(导出)之后其它文件才可以使用
  • 在CommonJS规范中想要使用其它文件暴露的变量函数必须通过require()导入模块才可以使用

三、NodeJS模块向外导出变量函数

推荐方式一二,不推荐使用方式三

1、方式一:通过exports.xxx = xxx导出
let name = "GG";
function sum(a, b) {
    return a + b;
}
exports.str = name;
exports.fn = sum;

外部文件使用变量函数

let aModule = require("./07-a");//使用函数所在的文件名
console.log(aModule);
2、方式二:通过module.exports.xxx = xxx导出
let name = "GG";
function sum(a, b) {
    return a + b;
}
module.exports.str = name;
module.exports.fn = sum;

外部文件使用变量函数

let aModule = require("./07-a");//使用函数所在的文件名
console.log(aModule);
3、方式三:通过global.xxx = xxx导出(了解即可,不符合commonJS的规范)
let name = "GG";
function sum(a, b) {
    return a + b;
}
global.str = name;
global.fn = sum;

外部文件使用变量函数

require("./07-a");
console.log(str);
console.log(fn(2,2));

注意点:
无论通过哪种方式导出, 使用时都需要先导入(require)才能使用
通过global.xxx方式导出不符合CommonJS规范, 不推荐使用

四、exports和module.exports区别

exports只能通过 exports.xxx方式(exports.str = name;//FF)导出数据, 不能直接赋值(exports = name;//{})
module.exports既可以通过module.exports.xxx方式(module.exports.str = name;//FF)导出数据,也可以直接赋值(module.exports = name;//FF)

  • 注意点:
    在企业开发中无论哪种方式都不要直接赋值

五、require注意点

  • 1.require导入模块时可以不添加导入模块的类型(可以不写.js)
    如果没有指定导入模块的类型, 那么会依次查找.js .json .node文件。都没找到会报错。
    无论是三种类型中的哪一种, 导入之后都会转换成JS对象返回给我们

  • 2.导入自定义模块时必须指定路径
    require可以导入"自定义模块(自己编写的文件模块)"、“系统模块(nodeJS自己的核心模块)”、“第三方模块”
    导入"自定义模块"模块时前面必须加上路径
    let aModule = require("./09");//正确
    let aModule = require(“09”);//会报错
    导入"系统模块"和"第三方模块"是不用添加路径

  • 3.导入"系统模块"和"第三方模块"是不用添加路径的原因
    如果是"系统模块"直接到环境变量配置的路径中查找
    如果是"第三方模块"会按照module.paths数组中的路径依次查找

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页