65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIconstarIcon

5.00/5 (6投票s)

2015年4月10日

MIT

7分钟阅读

viewsIcon

34044

downloadIcon

297

在本文中,我们将讨论如何创建 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 是一个 发布号
  • 它列出了所有已安装的包。如果您的包已列出,则表示您已成功安装。

    为了获得命中,切换到另一个目录并输入以下命令:

      	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)。

© . All rights reserved.