学习使用NPM发布你的第一个Node库

268 阅读6分钟

如果你是一个Node.js开发者,使用npm包对你来说不会是一个新概念。从复杂的npm包(如Express)到简单的包,npm承载了大量的Node.js库,简化了Node开发者的工作量。但你有没有想过发布一个自己的Node库来帮助其他开发者?在今天的教程中,我们将通过使用npm发布自己的Node.js库时必须遵循的步骤。

在我们开始之前...

在我们开始之前,你应该已经设置好了以下东西。

  • 一个[GitHub账户]
  • 安装了Node.js和npm
  • 一个[npm账户]

如果你已经设置好了以上所有的东西,让我们开始发布库。

在本教程中,我们要创建一个简单的库,将一个句子转换为标题大小写(其中每个单词的第一个字母都大写)。


选择一个包的名字

在为npm包选择名称时,你必须检查该名称在npm官方网站上是否可用。如果你是作为一个非范围内(公共)的包发布,你的包名应该是唯一的。

然而,如果该包是有范围的,或者说是私有的,那么包的名字就不一定是唯一的,名字的格式为@用户名/包名。

我们要创建的包的名字是 "title-case-converter"。


创建一个GitHub仓库

在GitHub上创建一个名为 "title-case-converter "的新仓库。确保用README来初始化该仓库。也要选择一个合适的许可证,如MIT许可证。


设置作者并登录npm

将你的名字、电子邮件和网站(如果有的话)保存到npm。这些细节将在项目创建时被添加到package.json文件中。

npm set init.author.name "<your-name>"
npm set init.author.email "<your-email-address">
npm set init.author.url "<your-website-url>"

然后,用npm login命令登录到npm。你会被提示输入你用来创建npm账户的凭据。


初始化该项目

为项目创建一个新的目录,并使用npm init 命令初始化它。确保填写软件包名称版本描述git仓库关键字许可证等字段,将这些细节添加到package.json 文件中。

(base) ➜  title-case-converter npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help init` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (title-case-converter)
version: (1.0.0)
description: Capitalizes the first letter of every word in a sentence
entry point: (index.js) app.js
test command: mocha
git repository: https://github.com/<username>/title-case-converter
keywords: title-case, converter
author: bajcmartinez
license: (ISC) MIT
About to write to /Users/zojcruzm/Projects/title-case-converter/package.json:

{
  "name": "title-case-converter",
  "version": "1.0.0",
  "description": "Capitalizes the first letter of every word in a sentence",
  "main": "app.js",
  "scripts": {
    "test": "mocha"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/%3Cusername%3E/title-case-converter.git"
  },
  "keywords": [
    "title-case",
    "converter"
  ],
  "author": "bajcmartinez",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/%3Cusername%3E/title-case-converter/issues"
  },
  "homepage": "https://github.com/%3Cusername%3E/title-case-converter#readme"
}


Is this OK? (yes) yes
(base) ➜  title-case-converter

(如果你已经登录并像我们上面做的那样在初始文件中设置了作者,可能不会问到作者的填写)。

创建的package.json文件包含这些细节。

{
  "name": "title-case-converter",
  "version": "1.0.0",
  "description": "Capitalizes the first letter of every word in a sentence",
  "main": "app.js",
  "scripts": {
    "test": "mocha"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/%3Cusername%3E/title-case-converter.git"
  },
  "keywords": [
    "title-case",
    "converter"
  ],
  "author": "bajcmartinez",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/%3Cusername%3E/title-case-converter/issues"
  },
  "homepage": "https://github.com/%3Cusername%3E/title-case-converter#readme"
}

此外,你可以在package.json 文件中添加另一个名为引擎的字段,以指定你的项目所兼容的最低版本的Node.js。

"engines": {
    "node": ">= 8.0.0"
 },

关于版本的一点信息

image.png 注意我们是如何为这个包使用1.0.0版本的。这是我们应该为发布到npm的软件包的初始版本使用的版本。

Npm使用一个叫做 "语义版本"(SemVer)的版本系统。默认的起始版本是1.0.0。在你的包的未来更新中,你可以按照SemVer标准进行三种类型的版本更改。这3种被命名为补丁、次要和主要。

  1. MAJOR版本,当你做不兼容的API修改时。
  2. 当你以向后兼容的方式增加功能时,MINOR版本,以及
  3. PATCH版本,当你进行向后兼容的错误修复时。

预发布和构建元数据的其他标签可作为MAJOR.MINOR.PATCH格式的扩展。


创建Node模块

现在我们可以实现我们的包,标题-大小写转换器。

创建一个名为app.js (或你设置为入口点的文件)的文件,并在其中添加以下代码。

function converter(sentence){
    let capitalized = []
    let words = sentence.split(" ") //split the sentence into words
    words.forEach(word => { 
        let capitalizedWord = word.slice(0, 1).toUpperCase() + word.slice(1) //capitalize the first letter of every word
        capitalized.push(capitalizedWord)         
    })
    let converted = capitalized.join(" ") 
    return converted
}

module.exports = converter

它包含一个名为converter 的函数,它接受一个字符串句子,并将其中每个单词的第一个字母大写。上述代码中最重要的部分是使用module.exports 输出创建的函数。


初始化 Git

现在,我们要使用命令git init ,为我们的项目初始化git。然后,使用下面的命令,将我们修改过的文件归档。

git add .

在下一步,提交代码的修改到本地仓库。

git commit -m "initial changes"

之后,我们要把GitHub仓库作为项目的远程仓库。

git remote add origin <GitHub repository URL>

从远程仓库拉出修改,然后将本地修改推送到远程仓库。

git pull origin master
git push origin master

为软件包写一个好的README文件

在发布npm包时,包含一个好的README是至关重要的。它可以让其他用户了解你的软件包的基本功能,以及他们如何在他们的项目中使用它。

为了更好地了解你的README应该是什么样的,你可以浏览流行的npm包和GitHub仓库,看看别人是怎么做的。

一般来说,README应该包括以下内容。

  • 对你的包所做的事情的一个小描述。
  • 其他用户如何安装该包以在他们的项目中使用它。
  • 如何在项目中使用该包。提供解释用法的代码例子。
  • 如何为你的软件包做贡献。如果你希望其他开源开发者为这个项目做出贡献,这个字段是README文件中必须添加的。
  • 包所使用的许可证。对于这个包,我们使用了MIT许可证。

完成这些修改后,不要忘记提交和推送。


将包发布到npm

尽管发布一个库的概念在你第一次听到时感觉很费劲,但这一步却出奇地简单。你所要做的就是在你的命令行中运行以下命令。

npm publish

如果你选择了一个不与现有npm包冲突的包名,这一步应该很顺利,在几秒钟内,你的第一个包就会被发布到npm。

现在你可以创建一个新的Node.js项目,并使用这个命令将你的新包作为一个依赖项安装。

npm install title-case-converter --save

然后,你可以将该包导入新项目,并使用它将句子按你的意愿转换为标题大写。

const converter = require("title-case-converter")

let convertedSentence = converter("my name is juan") //"My Name Is Juan"

这就是了!你现在是一个已发布的npm包的自豪主人了。

你可以尝试创建一个更复杂的Node.js模块,并在这之后将其发布到npm。


总结

正如你可能已经预料到的那样,发布NPM包是一项简单的任务,而且你并不总是需要像本教程中解释的那样按照同样的步骤进行操作。你可以通过使用npm命令或简单地编辑package.json 文件来指定作者,或对包名或任何其他属性进行修改。