构建、测试和发布 NPM 包
在本文中,我们将构建、测试和发布一个 npm 包,来检查字符串是否为电子邮件地址。 因此,如果想知道我们将如何做,请系好安全带,然后出发🚗
先决条件
构建
首先,我们需要一个目录来保存我们的代码,因此创建一个并使用终端打开它,然后通过运行以下命令初始化一个新的 Nodejs 项目:
$ npm init -y
该命令将生成一个带有默认值的 package.json
文件,我们稍后将对其进行编辑。
接下来,在我们的目录中,让我们创建一个新目录并将其命名为 src,然后在 src 中,让我们创建一个包含我们的代码的 index.js 文件。
现在我们的根目录具有以下文件结构:
.
└─src
│ └ index.js
│ package.json
让我们进入 src/index.js 文件并导出一个函数,该函数将字符串作为参数并检查它是否是电子邮件地址。 为此,我们将使用正则表达式(regex)。并测试给定的字符串是否与电子邮件地址的正则表达式模式匹配:
const isEmailAddress = (string) => {
const regex =
/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return regex.test(String(string).toLowerCase());
};
module.exports = isEmailAddress;
如果对正则表达式不熟悉的同学,可以参考正则表达式教程。
非常好! 现在我们已经创建了我们的包,让我们继续下一步。
测试
为了测试我们的包,我们将使用 Jest
作为我们的测试框架。 为此,我们首先使用以下命令将 Jest 作为开发依赖项安装:
$ npm install —-save-dev jest
然后在我们的根目录中创建一个新目录并将其命名为 test,并在其中创建一个 index.test.js 文件,该文件将包含我们的测试。
现在我们根目录的文件结构如下:
.
└─src
│ └ index.js
└─test
│ └ index.test.js
│ package.json
在 test/index.test.js 中,让我们导入我们从 src/index.js 导出的函数并编写我们的测试:
const isEmail = require("../src");
describe("isEmail", () => {
it("should return false if the email is not valid", () => {
expect(isEmail("123")).toBe(false);
expect(isEmail("email")).toBe(false);
expect(isEmail("example.com")).toBe(false);
expect(isEmail("email@example")).toBe(false);
});
it("should return true if email is valid", () => {
expect(isEmail("email@example.com")).toBe(true);
expect(isEmail("email123@example.com")).toBe(true);
expect(isEmail("email-12@example.com")).toBe(true);
expect(isEmail("email+az@example.com")).toBe(true);
});
});
要运行我们的测试,让我们转到 package.json 文件并编辑测试脚本以使用 jest:
- "test": "echo \\"Error: no test specified\\" && exit 1”
+ "test": "jest"
然后运行以下命令:
$ npm run test
你应该看到我们的测试通过了
发布包
要发布我们的包,我们需要对 package.json 文件进行一些更改,我们将从包名开始,我将其简单命名为 is-email-address,但在命名包之前,我们首先需要 确保自己的包名是唯一的并且不存在于 npm 注册表中,否则当你尝试发布它时会出错。
我还将添加一些描述,并将我们包的入口点设置为 src/index.js,我将添加一些关键字来帮助人们发现我们的包,因为它在 npm 搜索中列出(大家可以从这里了解更多关于 npm 的 package.json 的处理细节)。
现在 package.json 文件看起来像这样:
{
"name": "is-email-address",
"version": "1.0.0",
"description": "check whether a string is an email address",
"main": "src/index.js",
"scripts": {
"test": "jest"
},
"files": [
"src"
],
"keywords": [
"email",
"is-email-address",
"is-email"
],
"author": "Omar Baabouj <baabouj.dev@gmail.com>",
"license": "ISC",
"devDependencies": {
"jest": "^28.0.3"
}
}
回到终端,让我们首先通过运行命令登录到 npm:
$ npm login
我们将被要求输入用户名、密码和电子邮件。 添加后,我们就成功登录了!
现在到最后一步,让我们运行命令来发布我们的包:
$ npm publish
瞧! 你刚刚发布了一个 npm 包🎉
相关文章
使用 NPM 将 TypeScript 更新到最新版本
发布时间:2023/03/19 浏览次数:120 分类:TypeScript
-
本教程说明了如何使用 npm 更新到最新版本的 TypeScript。这将为如何使用 npm 将 TypeScript 更新到最新版本提供完整的实际示例。
pm2: command not found error 错误解决
发布时间:2022/09/27 浏览次数:339 分类:学无止境
-
使用 npx 解决错误“pm2: command not found”,例如 npx pm2 启动 app.js 或通过运行 npm install -g pm2 全局安装包,以便能够使用不带 npx 前缀的命令。
解决 Cannot find module 'lodash' 错误
发布时间:2022/09/21 浏览次数:230 分类:学无止境
-
要解决错误“Cannot find module 'lodash' ”,请确保通过在项目的根目录中打开终端并运行以下命令来安装lodash软件包:npm i lodash。 如果使用Typescript,请通过运行 NPM I -D @Types/lodash安装。
Cannot find module 'date-fns' 错误
发布时间:2022/09/16 浏览次数:154 分类:学无止境
-
要解决错误“Cannot find module 'date-fns'”,请确保通过在项目的根目录中打开终端并运行以下命令来安装 date-fns 包:npm i date-fns 并重新启动 IDE 和开发服务器。
Cannot find module 'prettier' 错误
发布时间:2022/09/16 浏览次数:558 分类:学无止境
-
要解决错误“Cannot find module 'prettier'”,请确保通过在项目的根目录中打开终端并运行以下命令来安装 prettier 包:npm install --save-dev prettier。
解决 Cannot find module 'webpack' 错误
发布时间:2022/09/16 浏览次数:154 分类:学无止境
-
要解决“Cannot find module 'webpack'”错误,需要确保通过运行 npm i -g webpack 命令全局安装 webpack,并通过运行 npm link webpack 命令创建从全局安装的包到 node_modules 的符号链接。
NPM 使用快捷方式安装 package 包
发布时间:2022/08/14 浏览次数:154 分类:学无止境
-
对于使用 NPM 安装包大家都熟悉,我们希望通过向大家展示包安装的快捷方式来提高大家的工作效率。 NPM 为从命令行执行的重复命令集成了多个时间节省器。
NPM 显示已安装和过期的 package 包
发布时间:2022/08/04 浏览次数:219 分类:学无止境
-
NPM 是使用 Node.js 时首选的包管理器。 我们不需要强调了解工具的重要性,当然,这也适用于 NPM。 这篇文章将向大家展示使用 NPM 显示本地存储库的已安装包或系统上全局安装的包的提
如何修复 NPM ERR Does Not Satisfy Its Siblings' peerDependencies Requirements
发布时间:2022/08/02 浏览次数:126 分类:学无止境
-
Npm ERR peerDependencies 这个错误很奇怪,因为它出现在你尝试使用 NPM 全局安装新包时,`npm install -g
`。 这个命令的输出是这样的: