Node.js模块定义总结

为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统。模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码、JSON 或者编译过的C/C++ 扩展。

Node.js 提供了exports 和 require 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象。

一模块对外部需要暴露什么样的接口,都是在定义时决定的。

在模块创建时,我们可以使用exports和module.exports两个方法来暴露接口。大多数时刻,使用两者是等同的,但也有细微的区别 。区别如下:

  1. exports 是指向的 module.exports 的引用;
  2. module.exports 初始值为一个空对象 {},所以 exports 初始值也是 {};
  3. require() 返回的是 module.exports 而不是 exports。

由于exports 是指向的 module.exports 的引用,所以,当我们想让模块导出的是一个对象时, exportsmodule.exports 均可使用(但 exports 也不能重新覆盖为一个新的对象),而当我们想导出非对象接口时,就必须也只能覆盖 module.exports

关于node的模块定义有几种不同的写法,大致总结如下:

返回一个JSON Object

如下代码是一个简单的示例。

 exp.js:

var exp = { 
    "name": "jeri", 
    "age": 25, 
    "email":"test@test.com"l,
};
module.exports = exp;
调用方式为:

app.js:

var exp = require("./exp");
console.log(exp.name);

这种方式可以用于返回一些全局共享的常量或者变量。

为一个模块,暴露几个方法。

如下,通常可以返回几个函数:

exp.js :

复制代码
var func1 = function() {
    console.log("func1");
};

var func2 = function() {
    console.log("func2");
};
exports.function1 = func1;
exports.function2 = func2;
复制代码
调用方式为:

app.js: 

var functions = require("./exp");
functions.function1();
functions.function2();

返回一个构造函数,也就是一个类

示例如下:
 
exp.js.js
复制代码
var MyClass = function(args) {
    this.args = args;
};

MyClass.prototype.func = function() {
    console.log(" MyClass.func");
    console.log(this.args);
};

module.exports =  MyClass;
复制代码
调用方法为

app.js

var MyClass = require("./MyClass");
var example = new MyClass("arguments");

返回一个普通函数

如下是一个简单的示例.

exp.js

var func = function() {
    console.log("this is a testing function");
};

module.exports = func;

调用方法.

app.js 

var func = require("./exp");
func();

返回一个对象object

如下是一个简单的示例 

exp.js

复制代码
var MyClass = function() {
    this.sayHello = "hello";
};
 
MyClass.prototype.func = function() {
    console.log("I say " + this.sayHello);
};

module.exports = new MyClass();
复制代码
调用方法.

app.js 

var obj = require("./MyClass");
obj.func();

有时候我们需要模块返回一个单例 singleton. 可以利用上面的方式1和方式4来实现。也就是如下两种形式:

app.js 

var MATH = {
    "pi": 3.14,
    "e": 2.72,
};
 
module.exports = MATH;
以及
复制代码
var CLASS = function() {
    this.sayHello = "hello";
};

CLASS.prototype.func = function() {
    console.log("I say " + this.sayHello);
};

module.exports = new CLASS();
复制代码
以上是总结的几种定义模块的方式。
posted @   默语  阅读(1150)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示