逐步学习如何创建 nodejs 模块并发布到 NPM。





5.00/5 (6投票s)
在本文中,我们将讨论如何创建 npm 包/模块。
目录
- 引言
- 目的
- 先决条件
- npm 包的必要性
- 什么是 npm?
- 开始创建 npm 包
- 开始编写实际代码
- 测试 npm 包/node 模块
- 执行测试
- 添加 README.md 文件
- 发布到 npm
- 结论
- 关注点
- 延伸阅读
引言
在本文中,我们将创建一个小程序/模块,用于 nodejs 或作为独立的 JavaScript 库。
目的
在此,我们的目的是开始创建 npm 包。我们将从一个简单的 npm 包开始并对其进行解释。在接下来的文章中,我们将进行更详细的讨论。
先决条件
要开始本系列,您应该了解:
- NodeJs
- npm
- 鲍尔
- JavaScript 基础知识
您应该
- 拥有有效的 npm 用户帐户
- 在您的机器上安装了 nodejs
npm 包的必要性
在我处理一个真实的 nodejs 应用程序时,我遇到了许多需要编写一些库的情况。最近,我认为这些库可能对他人有用。之后,我找到了 npm 包。
什么是 npm?
那么,我们脑海中首先会浮现的问题是关于 npm,它到底是什么?
在我看来,npm 是一个包仓库,我们可以在其中以包的形式部署/存储我们的库。库可以是任何 JavaScript。在这里,我们可以更新/升级和版本化我们的存储库。更多详情,请参阅 什么是 npm?
开始创建 npm 包
创建 npm 包非常简单。在此之前,请先安装 nodejs,我们在这里不讨论 nodejs 的安装过程,这超出了我们的范围。更多信息,请参阅 安装 nodejs。
安装后,请确保检查版本,在终端的命令行中输入以下命令,您也可以使用 Windows 的 Powershell。
node -v
npm -v
现在,我们准备好开始构建我们的第一个 npm/nodejs 包了。我建议您访问 http://npm.com 并注册,稍后我们将在本文中使用此帐户。
开始编写实际代码
以下步骤描述了如何进行我们的示例包的创建。
描述我们的演示应用程序
在我们的演示应用程序中,我们将构建一个将 数字转换为文本/单词 的包。为了简单起见,最初我们只接受整数,不允许小数。另外,我将其严格设置为“印度的数字读法”,即 千、万、十万、百万 等。
完成此包后,对于特定的数字,我们可以得到以下输出:
//1000 will be read as One Thousand
1000 = One Thousand
开始
为了开始我们的实际编码工作,让我们克隆您的 GIT 仓库(我们已经创建了我们的 GIT 仓库)到您的本地系统。在您的 GIT Bash 或任何其他 GIT 工具(您喜欢的任何一个)中输入以下命令。我将使用 GIT Bash。
git clone https://github.com/garora/number2text.git
cd number2text
有关更多说明,请参阅下图:
现在,我们准备开始创建我们的包信息了,在 GIT Bash 中输入以下命令...
npm init
...它将创建一个 package.json 文件,该文件只是以 json 形式创建您的包的数据。请参阅 https://docs.npmjs.net.cn/json。
填写完整信息,请参阅快照以获取更多说明。
在按下 ok 作为 Enter 后,我们的 package.json
将会是这样:
{
"name": "number2text",
"version": "0.1.0",
"description": "A small utility converts Number to Text
(supports to Indian numbers only with initial release).",
"main": "index.js",
"scripts": {
"test": "make test"
},
"repository": {
"type": "git",
"url": "https://github.com/garora/number2text.git"
},
"keywords": [
"number",
"text"
],
"author": "Gaurav Kumar Arora <g_arora@hotmail.com> (http://gaurav-arora.com/)",
"license": "MIT",
"url": "https://github.com/garora/number2text/blob/master/LICENSE",
"bugs": {
"url": "https://github.com/garora/number2text/issues"
},
"homepage": "https://github.com/garora/number2text",
"devDependencies": {
"mocha": "^2.2.1",
"chai": "^2.2.0"
}
}</g_arora@hotmail.com>
随着代码的不断完善,我们将更改 package.json 文件内容。
您可以看到,在 package.json 中,我们将 index.js 作为我们的 main。在我们开始创建主文件之前,让我们创建一个我们将用于我们包的库。
转到 GIT Bash 并通过输入以下命令添加一个名为 lib 的新文件夹:
mkdir lib
然后进入 lib 文件夹/目录。
cd lib
现在,选择您最喜欢的编辑器来编写 JavaScript 代码。我将选择 Sublime Text。现在,在 lib 文件夹下创建一个新的 js 文件并命名为 numberToText.js。
在此文件中添加以下代码:
function numberToText(num)
{
if(isNaN(num))
return "Invalid number.";
if(!isInt(num))
return "Currently support for decimal is unavailable.";
if(!isInRange(num))
return "Please enter number between 0 - 999999999.";
return toText(num,'Indian'); //currently supports for Indian number conversions
}
...
//Rest part of code has been removed
...
-
代码解释
在上面的代码中,我们编写的代码用于接受范围内的 数字、整数
<var>0 - 999999999</var>
。添加 exports,以便我们可以在主 js 文件中使用此库。
//export module.exports = numberToText;
请参考附带的演示源代码以获取以上代码片段的完整内容。
现在,在我们的主文件夹中,创建一个新文件并命名为 index.js。现在,添加以下代码片段,以便我们能够获取我们库的功能。
var numberToText = require('./lib/numberToText');
在这里,我们正在获取我们库的对象,然后这是我们的主模块。
module.exports = function (num) {
return numberToText(num);
};
最后,我们完成了所有想要添加到我们包中的内容。
执行测试
现在让我们运行测试,转到 package.json 文件并将 test 节点更新为以下内容:
"test": "./node_modules/.bin/mocha"
发布到 npm
最后,我们将发布我们的包。我总是喜欢在发布前测试我们的包,这里的测试不意味着编写测试,而是意味着验证包是否可以成功安装。要做到这一点,请输入以下命令(确保您位于包的根目录):
npm install . -g
验证安装
npm ls -g
-
测试 npm 包/Node 模块
在完成所有代码工作后,我们需要确保一切正常。最基本的方法是编写测试。所以,让我们开始编写一些测试。
在我们开始编写测试用例之前,我们需要选择一个测试框架,我选择 Mocha and Chai。您可以选择您喜欢的任何一个。
现在,安装这些框架,以便我们可以开始编写测试:
npm install mocha --save-dev npm install chai --save-dev
您注意到了吗?我们将这两个作为开发依赖项安装,为什么?仅仅因为我们在开发过程中需要这两个,而当有人实际使用我们的模块/包时不需要它们。它们将被安装在一个名为 node_modules 的新文件夹中。我们的用户不需要这个文件夹,那么我们为什么要将其签入呢?要忽略这个文件夹,有一个 .gitignore 文件。只需去创建一个该文件,并在根目录下添加以下内容:
node_modules
它会告诉 GIT,我们在签入时应该忽略该文件夹。
转到并创建一个名为 test 的新文件夹,并在该文件夹下创建一个名为 index.js 的文件。并编写我们的第一个测试:
声明测试框架
var should = require('chai').should(), number2text = require('../index');
我们的测试
describe('Negative Tests', function() { it('Test for invalid number', function() { number2text('N').should.equal('Invalid number.'); }); it('Test for decimal', function() { number2text('10.10').should.equal('Currently support for decimal is unavailable.'); }); it('Out of range - Lower', function() { number2text(-1).should.equal('Please enter number between 0 - 999999999.'); }); it('Out of range - Higher', function() { number2text(1000000000).should.equal('Please enter number between 0 - 999999999.'); }); });
- 现在,我们准备运行测试了。从您的 GIT Bash 输入以下命令:
npm test
您将看到以下屏幕:
确保所有测试都通过。
添加 README.md 文件
我们已经完成了包的创建。现在,是时候描述我们的包了,在这里我们将添加一个典型的 ReadMe 文件,使用 markdown 标记。
我将一个典型的 readme 文件分为以下几类:
标题和描述
这不言而喻。它提供了模块/包的名称和简短描述。
## number2text A small utility converts Number to Text (supports to Indian numbers only with initial release).
安装说明
在本节中,我们告诉用户如何安装该包。
npm install number2text --save
使用包/模块的说明
在这里,您应该提供一些使用示例。
# How to use? var numberToText = require('number2text'); var textDefault = numberToText(100); //it converts to default type i.e. Indian console.log('Converts 1000000 to ', textDefault); //Converts 1000000 to Ten Lakh
发布历史
以
major.minor.patch
形式发布的典型版本历史记录。更多信息,请参阅 http://semver.org/。打开 package.json 文件并将您的版本更新为:
"version": "0.0.1"
许可证
这是 Readme 中非常重要的一部分,在这里您告诉人们您想要如何提供您的包。我使用的是 MIT License,如下所示:
The MIT License (MIT) Copyright (c) 2015 Gaurav Kumar Arora
转到 package.json 文件并将 License 信息更新为:
"licenses": [ { "type": "MIT", "url": "https://open-source.org.cn/licenses/MIT" } ]
- 在这里,我们定义了我们的许可证类型和一个参考 URL,它告诉我们许可证的详细信息。
转到 https://open-source.org.cn/licenses/alphabetical 获取 MIT 许可证的内容。然后将这些内容添加到名为 License 的新文件中。
太棒了!我们完成了。现在,在 GIT Bash 中输入以下命令,以确保我们已将所有内容推送到我们的 GIT 仓库:
git tag 0.0.1 git push origin master --tags
在 GIT 中,tag 是一个 发布号。 - 在这里,我们定义了我们的许可证类型和一个参考 URL,它告诉我们许可证的详细信息。
- 它列出了所有已安装的包。如果您的包已列出,则表示您已成功安装。
为了获得命中,切换到另一个目录并输入以下命令:
node var numberToText = require('number2text'); var textDefault = numberToText(100); console.log('Converts 1000000 to ', textDefault);
您将看到以下屏幕:
现在,最后通过输入以下命令将您的包发布到 npm:
npm publish
访问 https://npmjs.net.cn 登录并检查您发布的包。我们在这里发布了:number2text。
结论
在本文中,我们讨论了如何分步创建和发布 npm 包。
关注点
在处理 npm 包的创建时,我们应该记住这些要点:
- require - 我们需要其他模块来支持我们的模块,我们也称之为模块依赖项等。
- exports - 我们希望其他人可以使用我们的模块,因此,我们必须公开导出模块。
延伸阅读
希望您喜欢阅读本文。我建议阅读以下文章,以便您可以玩转演示应用程序并享受 npm 的乐趣(如果您想要任何修改,请提交一个 pull request)。