Node.js 创建、发布、扩展和管理
Node.js 中的模块是单个单元中代码的逻辑封装。这总是一种良好的编程习惯,就是以这样的一种方式隔离代码,使其更易于管理和维护以备将来使用。这就是 Node.js 中的模块运行的地方。
由于每个模块都是一个独立的实体,具有自己的封装功能,因此可以作为单独的工作单元进行管理。
在本教程中,我们将了解如何在 Node.js 中使用模块。
在本教程中,你将学习 -
- Node.js 中的模块是什么
- 在 Node.js 中使用模块
- 创建 NPM 模块
- 扩展模块
- 发布 NPM 模块
- 使用 npm 管理第三方包
- 什么是 package.json 文件
Node.js 中的模块是什么?
如前所述,Node.js 中的模块是一种将代码封装在单独的逻辑单元中的方法。网络上有许多现成的模块可以在 Node.js 中使用。
下面是一些在 Node.js 应用程序中使用的流行模块
- Express 框架 - Express 是一个最小且灵活的 Node.js Web 应用程序框架,为 Web 和 Mobile 应用程序提供了一组强大的功能。
- Socket.io - Socket.IO 支持实时双向基于事件的通信。该模块适用于创建基于聊天的应用程序。
- Jade - Jade 是一个高性能的模板引擎,用[JavaScript](/ interactive-javascript-tutorials.html)实现节点和浏览器。
- MongoDB - [MongoDB]/tutorial/mongodb/) Node.js 驱动程序是 MongoDB 官方支持的 Node.js 驱动程序。
- Restify - restify 是一个轻量级框架,类似于 express,用于构建 REST API
- Bluebird - Bluebird 是一个功能齐全的 Promise 库,专注于创新功能和性能
在 Node.js 中使用模块
为了在 Node.js 应用程序中使用模块,首先需要使用 Node 包管理器来安装它们。
以下命令行显示了如何安装模块 express
。
npm install express
- 上面的命令将下载包含
express
模块的必要文件,并负责安装 - 安装模块后,为了在 Node.js 应用程序中使用模块,你需要使用
require
关键字。此关键字是 Node.js 用于在应用程序中合并模块功能的一种方式。
让我们看一个如何使用 require
关键字的示例。下面的 Tastones
代码示例显示了如何使用 require 函数
var express=require('express');
var app=express();
app.set('view engine','jade');
app.get('/',function(req,res)
{
});
var server=app.listen(3000,function()
{
});
-
在第一个语句中,我们使用
require
关键字来包含express
模块。express
模块是 Node.js 开发的优化 JavaScript 库。这是最常用的 Node.js 模块之一。 -
包含模块后,为了使用模块中的功能,需要创建一个对象。这里创建了
express
模块的对象。 -
使用
require
命令包含模块并创建对象
后,可以调用express
模块所需的方法。这里我们使用set
命令设置视图引擎,该引擎用于设置 Node.js 中使用的模板引擎。
注意: -(仅供读者理解,模板引擎是一种通过从数据文件中提取数据来在应用程序中注入值的方法。这个概念在 AngularJS 中非常有名,其中大括号 {{key}}
用于替换网页中的值。花括号中的 key
一词基本上表示在显示页面时将被值替换的变量。)
这里我们使用 listen
方法使应用程序监听特定的端口号。
创建 NPM 模块
Node.js 能够创建自定义模块,并允许你在 Node.js 应用程序中包含这些自定义模块。
让我们看一个简单的例子,说明我们如何创建自己的模块并在主应用程序文件中包含该模块。我们的模块实现 2 个数字相加的简单函数。
让我们按照以下步骤来了解如何创建模块并将它们包含在我们的应用程序中。
步骤 1: 创建一个名为 Addition.js
的文件,并包含以下代码。该文件将包含模块的逻辑。
下面是此文件的代码;
var exports=module.exports={};
exports.AddNumber=function(a,b)
{
return a+b;
};
exports
关键字用于确保其他文件实际可以访问此文件中定义的函数。- 然后我们定义一个名为
AddNumber
的函数。该函数定义为采用 2 个参数 a 和 b。该函数被添加到模块exports
中,以使该函数成为可由其他应用程序模块访问的公共函数。 - 函数返回两个参数相加的和。
现在我们已经创建了我们的自定义模块,它具有 2 个数字相加的功能。现在是时候创建一个应用程序来调用此模块。
在下一步中,我们将实际看到如何创建将调用我们的自定义模块的应用程序。
步骤 2: 创建一个名为 app.js
的文件,这是你的主应用程序文件并添加以下代码
var Addition=require('./Addition.js');
console.log(Addition.AddNumber(1,2));
- 我们使用
require
关键字将函数包含在 Addition.js 文件中。 - 由于现在可以访问 Addition.js 文件中的函数,我们现在可以调用 AddNumber 函数。在函数中,我们传递 2 个数字作为参数。然后我们在控制台中显示该值。
输出:
- 运行 app.js 文件时,你将在控制台中看到输出为 3。
- 结果是因为 Addition.js 文件中的 AddNumber 函数被成功调用,并且返回值 3 显示在控制台中。
注意: - 我们尚未使用 npm
来安装我们的 Addition.js 模块。这是因为该模块已经是本地机器上项目的一部分。当你在 Internet 上发布模块时,Node 包管理器会出现在后面的主题中介绍到。
扩展模块
创建模块时,还可以从另一个模块扩展或继承一个模块。
在现代编程中,构建通用模块库然后根据需要扩展这些通用模块的功能是很常见的。
让我们看一下如何在 Node.js 中扩展模块的示例。
步骤 1: 创建基本模块。
在我们的示例中,创建一个名为 Tutorial.js
的文件并放置以下代码。
在这段代码中,我们只是创建一个函数,它将一个字符串返回给控制台。返回的字符串是 Tastones Tutorial
。
var exports=module.exports={};
exports.tutorial=function()
{
console.log("Tastones Tutorial")
}
- 使用
exports
模块,以便在 Node.js 中的其他模块中可以使用此文件中定义的任何函数 - 我们正在创建一个名为
tutorial
的函数,可以在其他 Node.js 模块中使用。 - 调用此函数时,我们在控制台中显示一个字符串
Tastones Tutorial
。
现在我们已经创建了名为 Tutorial.js 的基础模块。现在是时候创建另一个扩展这个基础模块的模块了。
我们将在下一步中学习如何执行此操作。
步骤 2: 接下来我们将创建扩展模块。创建一个名为 NodeTutorial.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();
}
}
注意,以下是上面代码的关键点,
-
我们在新模块文件中使用
require
功能。由于我们要扩展现有的模块文件Tutorial.js
,我们需要在扩展它之前首先包含它。 -
然后我们创建一个名为
Nodetutorial
的函数。这个函数可以做两件事,- 它会向控制台发送一个字符串
Node Tutorial
。 - 它将从基础模块
Tutorial.js
发送字符串Tastones Tutorial
到我们的扩展模块NodeTutorial.js
。
- 它会向控制台发送一个字符串
-
在这里,我们执行第一步,将
Node Tutorial
字符串发送到控制台。 -
下一步是从我们的 Tutorial 模块调用该函数,该模块将输出字符串
Tastones Tutorial
到console.log
。
步骤 3: 创建主 app.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
上面的代码做了以下事情;
- 我们的主应用程序文件现在调用
NodeTutorial
模块。 - 我们正在调用
NodeTutorial
功能。通过调用此函数,文本节点教程
将显示在控制台日志中。 - 因为我们扩展了 Tutorial.js 模块并公开了一个名为
pTutor
的函数。它还调用 Tutorial.js 模块中的 tutorial 模块,并且文本Tastones Tutorial
也将显示在控制台中。
输出:
由于我们使用 Node 执行了上述 app.js 代码,因此我们将在 console.log 文件中获得以下输出
- Node Tutorial
- Tastones Tutorial
发布 NPM(节点包管理器)模块
可以将自己的模块发布到自己的 Github 存储库。
通过将模块发布到中心位置,你无需在每台需要它的机器上都来自己安装。相反,你可以使用 npm 的 install 命令来安装已发布的 npm 模块。
需要执行以下步骤来发布 npm 模块
步骤 1: 在 GitHub(在线代码库管理工具)上创建你的存储库。它可用于托管你的代码存储库。
步骤 2)你需要告诉本地 npm 安装你是谁。这意味着我们需要告诉 npm 谁是这个模块的作者,什么是电子邮件 ID 或者公司 URL 等,需要与此 ID 相关联。所有这些细节将在发布时添加到你的 npm 模块中。
以下命令设置 npm 模块作者的名称,电子邮件和 URL。
npm set init.author.name "Tastones"
npm set init.author.email"email@example.com"
npm set init.author.url http://www.tastones.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 管理第三方软件包
正如我们所看到的,npm
能够管理 Node.js 应用程序所需的模块。
让我们看一下 npm
中用于管理模块的一些功能
-
以全局模式安装软件包 - 可以在全局级别安装模块,这基本上意味着这些模块可用于本地计算机上的所有 Node.js 项目。下面的示例显示了如何使用全局选项安装
express module
。npm install express -global
上述语句中的 -global
选项允许在全局级别安装模块。
-
列出本地计算机上安装的所有全局包。这可以通过在命令提示符中执行以下命令来完成
npm list --global
-
安装特定版本的软件包 - 有时可能需要仅安装特定版本的软件包。一旦知道了什么是软件包以及需要安装的相关版本,就可以使用 npm install 命令安装该特定版本。 下面的示例显示了如何安装名为 underscore 模块的特定版本 1.7.0。
npm install underscore@1.7.0
-
更新软件包版本 - 有时你可能在系统中使用旧版本的软件包,并且你可能希望更新到市场上可用的最新版本。要执行此操作,可以使用 npm update 命令。以下示例显示如何将 underscore 包更新到最新版本
npm update underscore
-
搜索特定包 - 要搜索特定版本是否在本地系统上可用,你可以使用 npm 的搜索命令。以下示例将检查
express
模块是否安装在本地计算机上。npm search express
-
卸载软件包 - 你可以在其中安装软件包,也可以卸载软件包。使用 npm 的卸载命令完成软件包的卸载。以下示例显示了如何卸载
express
模块npm uninstall express
什么是 package.json 文件
package.json
文件用于保存有关特定项目的元数据。此信息为 Node 包管理器提供了必要的信息,以了解应如何处理项目及其依赖项。
package.json
文件包含诸如项目描述,特定分发中的项目版本,许可证信息和配置数据之类的信息。
package.json
文件通常位于 Node.js 项目的根目录下。
让我们举一个例子,来说明在通过 npm 安装时一个模块的结构是如何的。
下面的快照显示了 express
模块包含在 Node.js 项目中时的文件内容。从快照中,你可以在 express 文件夹中看到 package.json 文件。
![Node.js NPM 教程:创建,发布,扩展和管理](/img/Nodejs/Nodejs package json.png)
如果打开 package.json 文件,你将在文件中看到很多信息。
下面是文件的一部分摘要。express@~4.13.1 提到正在使用的 express
模块的版本号。
{
"_args": [
[
"express@~4.13.1",
]
],
"_from": "express@>=4.13.1 <4.14.0",
"id": "express@4.13.3",
"_inCache": true,
"_installable": true,
"_location": "/express",
"_npmUser": {
"email": "doug@somethingdoug.com",
"name": "dougwilson"
本节概要
- Node.js 中的模块是单个单元中代码的逻辑封装。分离到模块使代码更易于管理和维护,以备将来使用
- 市场上有许多模块可以在 Node.js 中使用,例如 express,underscore,MongoDB 等。
- 节点包管理器(npm)用于下载和安装模块,然后可以在 Node.js 应用程序中使用。
- 可以创建自定义 NPM 模块,扩展这些模块并发布这些模块。
- Node 包管理器有一套完整的命令来管理本地系统上的 npm 模块,如安装,卸载,搜索等。
- package.json 文件用于保存 npm 模块的整个元数据信息。