Node.js NPM 教程:如何创建、扩展、发布模块

Node.js 模块

Node.js 中的模块是代码在单个单元中的逻辑封装。将代码进行分割,可以使代码更易于管理和维护。这就是 Node.js 中模块的作用。

由于每个模块都是一个独立的实体,具有自己的封装功能,因此可以作为一个独立的工作单元进行管理。

什么是 Node.js 中的模块?

如前所述,Node.js 中的模块是通过将代码封装在独立的逻辑单元中来实现的。市场上有很多现成的模块可以在 Node.js 中使用。

以下是一些在 Node.js 应用程序中常用的流行模块:

  1. Express 框架 – Express 是一个最小化且灵活的 Node.js Web 应用程序框架,为 Web 和移动应用程序提供了一套强大的功能。
  2. Socket.io – Socket.IO 支持实时双向事件驱动的通信。此模块非常适合创建基于聊天的应用程序。
  3. Jade – Jade 是一个高性能的模板引擎,使用JavaScript实现,适用于 Node 和浏览器。
  4. MongoDBMongoDB Node.js 驱动程序是 MongoDB 官方支持的 Node.js 驱动程序。
  5. Restify – restify 是一个轻量级框架,类似于 express,用于构建 REST API
  6. Bluebird – Bluebird 是一个功能齐全的 Promise 库,专注于创新功能和性能。

在 Node.js 中使用模块

要在 Node.js 应用程序中使用模块,首先需要使用 Node 包管理器进行安装。

以下命令行演示了如何安装名为“express”的模块。

npm install express

Using Modules in Node.js

  • 上述命令将下载包含“express 模块”的必要文件并负责安装。
  • 模块安装完成后,要在 Node.js 应用程序中使用该模块,您需要使用 'require' 关键字。此关键字是 Node.js 将模块功能集成到应用程序中的方式。

让我们看一个如何使用“require”关键字的示例。以下“Guru99”代码示例展示了如何使用 require 函数:

Using Modules in Node.js

var express=require('express');
var app=express();
app.set('view engine','jade');
app.get('/',function(req,res)
{
});
var server=app.listen(3000,function()
{
});
  1. 在第一个语句中,我们使用“require”关键字来包含 express 模块。“express”模块是 Node.js 开发的优化JavaScript库。这是最常用的 Node.js 模块之一。
  2. 包含模块后,要使用模块内的功能,需要创建一个对象。这里创建了一个 express 模块的对象。
  3. 一旦使用“require”命令包含模块并创建了“对象”,就可以调用 express 模块所需的函数。这里我们使用 set 命令设置视图引擎,它用于设置 Node.js 中使用的模板引擎。
  4. 注意:-(仅供读者理解;模板引擎是一种通过选择数据文件中的数据来将值注入应用程序的方法。这个概念在 Angular JS 中非常流行,其中花括号 {{ key }} 用于替换网页中的值。花括号中的“key”一词基本上表示将由显示页面时的一个值替换的变量。)

  5. 这里我们使用 listen 方法使应用程序监听特定端口号。

如何创建 NPM 模块

Node.js 能够创建自定义模块,并允许您将这些自定义模块包含在您的 Node.js 应用程序中。

让我们看一个如何创建我们自己的模块并将其包含在主应用程序文件中的简单示例。我们的模块将执行一个简单的任务:将两个数字相加。

让我们按照以下步骤查看如何创建模块并将其包含在我们的应用程序中。

以下是关于如何创建 NPM 模块的分步过程

第 1 步) 创建一个文件并粘贴以下代码
创建一个名为“Addition.js”的文件并包含以下代码。此文件将包含模块的逻辑。

以下是此文件中的代码;

Creating NPM Modules

var exports=module.exports={};
exports.AddNumber=function(a,b)
{
return a+b;
};
  1. “exports”关键字用于确保在此文件中定义的功能可以被其他文件访问。
  2. 然后我们定义一个名为‘AddNumber’的函数。此函数被定义为接受 2 个参数,a 和 b。该函数被添加到模块“exports”中,以使该函数成为可以被其他应用程序模块访问的公共函数。
  3. 我们最后让我们的函数返回参数相加的值。

既然我们已经创建了具有两个数字相加功能的自定义模块,那么现在是时候创建一个将调用此模块的应用程序了。

下一步,我们将实际了解如何创建调用我们自定义模块的应用程序。

第 2 步) 创建一个应用程序文件
创建一个名为“app.js”的文件,这是您的主应用程序文件,并添加以下代码

Creating NPM Modules

var Addition=require('./Addition.js');
console.log(Addition.AddNumber(1,2));
  1. 我们使用“require”关键字来包含 Addition.js 文件中的功能。
  2. 由于 Addition.js 文件中的函数现在可以访问,我们现在可以调用 AddNumber 函数。在该函数中,我们传递了 2 个数字作为参数。然后我们在控制台中显示该值。

Creating NPM Modules

输出:

  • 当您运行 app.js 文件时,您将在控制台中看到输出值为 3。
  • 结果是因为成功调用了 Addition.js 文件中的 AddNumber 函数,并在控制台中显示了返回值 3。

注意:– 我们目前还没有使用“Node 包管理器”来安装我们的 Addition.js 模块。这是因为该模块已经是本地计算机上我们项目的一部分。Node 包管理器在您将模块发布到互联网时发挥作用,我们将在后续主题中介绍。

扩展 Node.js 中的模块

创建模块时,也可以从另一个模块扩展或继承一个模块。

在现代编程中,构建常用模块库然后根据需要扩展这些常用模块的功能是很常见的。

让我们看一个如何扩展 Node.js 中模块的示例。

第 1 步) 创建基础模块。

在我们的示例中,创建一个名为“Tutorial.js”的文件并粘贴以下代码。

在此代码中,我们只是创建一个函数,该函数将字符串返回到控制台。返回的字符串是“Guru99 Tutorial”。

Extending Modules in Node.js

var exports=module.exports={};
exports.tutorial=function()
{
console.log("Guru99 Tutorial")
}
  1. exports 模块用于确保此文件中定义的任何函数都可以被 Node.js 中的其他模块访问。
  2. 我们正在创建一个名为 tutorial 的函数,该函数可以在其他 Node.js 模块中使用。
  3. 当调用此函数时,我们会在控制台中显示字符串“Guru99 Tutorial”。

既然我们已经创建了名为 Tutorial.js 的基础模块,那么现在是时候创建另一个将扩展此基础模块的模块了。

我们将在下一步中探讨如何做到这一点。

第 2 步) 接下来,我们将创建扩展模块。创建一个名为“NodeTutorial.js”的新文件并将以下代码放入文件中。

Extending Modules in Node.js

var Tutor=require('./Tutorial.js');
exports.NodeTutorial=function()
{
console.log("Node Tutorial")
function pTutor()
{
var PTutor=Tutor
PTutor.tutorial();
}
}

Or
var Tutor=require('./Tutorial.js');
exports.NodeTutorial=function()
{
console.log("Node Tutorial")
this.pTutor = function ()
{
var PTutor=Tutor
PTutor.tutorial();
}
}

注意,以下是关于上述代码的关键点:

  1. 我们正在模块文件本身中使用“require”函数。由于我们将扩展现有的模块文件“Tutorial.js”,因此在扩展它之前需要先包含它。
  2. 然后我们创建一个名为“Nodetutorial”的函数。此函数将执行两件事:
  • 它会将字符串“Node Tutorial”发送到控制台。
  • 它会将来自基础模块“Tutorial.js”的字符串“Guru99 Tutorial”发送到我们的扩展模块“NodeTutorial.js”。
  1. 在这里,我们正在执行第一步,将字符串“Node Tutorial”发送到控制台。
  2. 下一步是调用 Tutorial 模块中的函数,该函数会将字符串“Guru99 Tutorial”输出到 console.log。

第 3 步) 创建您的 main app.js 文件,这是您的主应用程序文件,并包含以下代码。

Extending Modules in Node.js

var localTutor=require('./NodeTutorial.js');
localTutor.NodeTutorial();
localTutor.NodeTutorial.pTutor();

Or use this code
var tut = new localTutor.NodeTutorial();  // Create and save object
tut.pTutor();  // Call function on object

上面的代码执行以下操作:

  1. 我们的主应用程序文件现在调用“NodeTutorial”模块。
  2. 我们正在调用“NodeTutorial”函数。通过调用此函数,文本“Node Tutorial”将在控制台日志中显示。
  3. 由于我们扩展了 Tutorial.js 模块并暴露了一个名为 pTutor 的函数。它还调用 Tutorial.js 模块中的 tutorial 模块,并且文本“Guru99 Tutorial”也将显示在控制台中。

输出

由于我们使用 Node 执行了上面的 app.js 代码,我们将在 console.log 文件中获得以下输出:

  • Node Tutorial
  • Guru99 Tutorial

NPM (Node 包管理器) 发布包

可以将自己的模块发布到自己的 Github 存储库。

通过将您的模块发布到中央位置,您就不必在需要它的每个机器上自行安装。

相反,您可以使用 npm 的 install 命令来安装您已发布的 npm 模块。

要发布 npm 模块,需要遵循以下步骤:

第 1 步) 在 GitHub (一个在线代码存储库管理工具) 上创建您的存储库。它可以用于托管您的代码存储库。

第 2 步) 您需要告知您的本地 npm 安装您是谁。这意味着我们需要告知 npm 谁是此模块的作者、电子邮件 ID 以及任何可用的公司 URL,这些都需要与此 ID 相关联。所有这些详细信息将在发布 npm 模块时添加到您的 npm 模块中。

以下命令设置了 npm 模块作者的姓名、电子邮件和 URL。

npm set init-author-name “Guru99.”

npm set init-author-email “guru99@gmail.com”

npm set init-author-url “http://Guru99.com”

第 3 步) 下一步是使用上一步中提供的凭据登录 npm。要登录,您需要使用以下命令

npm login

第 4 步) 初始化您的包 – 下一步是初始化包以创建 package.json 文件。可以通过发出以下命令来完成此操作

npm init

当您发出上述命令时,系统会提示您回答一些问题。其中最重要的是您的模块的版本号。

第 5 步) 发布到 GitHub – 下一步是将您的源文件发布到 GitHub。可以通过运行以下命令来完成此操作。

git add.
git commit -m "Initial release"
git tag v0.0.1 
git push origin master --tags

第 6 步) 发布您的模块 – 最后一步是将您的模块发布到 npm 注册表。这可以通过以下命令完成。

npm publish

使用 npm 管理第三方包

正如我们所见,“Node 包管理器”能够管理 Node.js 应用程序所需的模块。

让我们看一些 Node 包管理器中用于管理模块的可用函数。

  1. 以全局模式安装包 – 模块可以安装在全局级别,这意味着这些模块将可供本地计算机上的所有 Node.js 项目使用。下面的示例显示了如何安装“express 模块”并带上全局选项。npm install express –global上述语句中的全局选项允许模块安装在全局级别。
  2. 列出本地计算机上安装的所有全局包。可以通过在命令提示符中执行以下命令来完成此操作npm list –global如果您之前在系统中安装了“express 模块”,则会显示以下输出。您可以在此处看到本地计算机上安装的不同模块。

Managing Third party Packages with NPM

  1. 安装特定版本的包 – 有时可能需要安装特定版本的包。一旦您知道包名和需要安装的相关版本,您就可以使用 npm install 命令来安装该特定版本。下面的示例显示了如何安装名为 underscore 的模块,特定版本为 1.7.0:npm install underscore@1.7.0
  2. 更新包版本 – 有时您可能有一个旧版本的包在系统中,并且您可能想更新到市场上可用的最新版本。为此,可以使用 npm update 命令。下面的示例演示如何将 underscore 包更新到最新版本:npm update underscore
  3. 搜索特定包 – 要搜索本地系统上是否存在特定版本,您可以使用 npm 的 search 命令。下面的示例将检查 express 模块是否已安装在本地计算机上。npm search express
  4. 卸载包 – 您可以像安装包一样卸载包。包的卸载是通过 npm 的 uninstall 命令完成的。下面的示例演示如何卸载 express 模块:npm uninstall express

什么是 package.json 文件

“package.json”文件用于保存**特定项目的元数据**。此信息为 Node 包管理器提供了了解项目应如何处理及其依赖项的必要信息。

package.json 文件包含项目描述、特定分发中的项目版本、许可证信息和配置数据等信息。

package.json 文件通常位于 Node.js 项目的根目录中。

让我们看一个通过 npm 安装模块时模块结构示例。

下面的快照显示了当 express 模块包含在您的 Node.js 项目中时,其文件内容。从快照中,您可以看到 express 文件夹中的 package.json 文件。

The Package.json File

如果您打开 package.json 文件,您会看到文件中有大量信息。

以下是文件一部分的快照。**express@~4.13.1** 提到了正在使用的 express 模块的版本号。

The Package.json File

摘要

  • Node.js 中的模块是代码在单个单元中的逻辑封装。分离到模块可以使代码在未来更易于管理和维护。
  • 市场上有很多模块可以在 Node.js 中使用,例如 express、underscore、MongoDB 等。
  • Node 包管理器 (npm) 用于下载和安装可以在 Node.js 应用程序中使用的模块。
  • 您可以创建自定义 NPM 模块,扩展这些模块,还可以发布这些模块。
  • Node 包管理器提供了一整套命令来管理本地系统上的 npm 模块,例如安装、卸载、搜索等。
  • package.json 文件用于保存 npm 模块的全部元数据信息。