使用npm发布typescript包

使用npm发布typescript包

什么是NPM

NPM(节点包管理器)是 JavaScript 编程语言的默认包管理器。NPM 注册表是一个公共存储库,充当存储和分发 JavaScript 包的中心枢纽。它允许开发人员轻松安装、管理和共享可重用的 JavaScript 代码包,也称为模块或包。

什么是 Typescript 以及为什么要使用它

TypeScript 是微软开发的一种编程语言。它是 JavaScript 的超集,这意味着任何有效的 JavaScript 代码也是有效的 TypeScript 代码。与普通 JavaScript 相比,它具有以下优势:

  • 静态类型
  • 改进的 IDE 支持
  • 提高代码质量
  • 访问高级语言功能
  • 更好的工具
  • 改善协作。

这些好处增强了 NPM 包的开发体验,并使包的用户更容易使用它们并将其集成到他们的项目中,从而产生更可靠、可扩展和可维护的 JavaScript 应用程序。

在本文中,我们将了解如何使用 Typescript 创建自己的 NPM 包以及如何将其发布到 NPM 注册表。

初始化一个typescript项目

  • 在本地计算机上创建一个新的项目目录。

  • 打开终端或命令提示符并导航到项目目录。

  • 运行以下npm init命令来初始化新的 Node.js 项目
    在这里插入图片描述
    第一个字段是package name,这应该是我们的包的唯一名称。我们可以通过搜索NPM 注册表来检查该名称是否可用。如果该名称可用,我们可以按Enter移至下一个。

    下一个version字段的默认值为1.0.0。包版本通常使用语义版本控制。

    什么是语义版本控制?
    它提供了一种标准方法来传达包中不同版本之间的兼容性和更改。它由三个数字组成:主要版本、次要版本和补丁版本,表示为MAJOR.MINOR.PATCH 例如 1.0.7
    MAJOR版本增量:引入不兼容的更改。
    MINOR版本增量:以向后兼容的方式添加新功能。
    PATCH版本增量:进行向后兼容的错误修复或小更新。
    通过遵循语义版本控制实践并使用版本约束,开发人员可以有效地管理依赖项、确保兼容性并向 NPM 包的用户和使用者传达包更新的影响。

    下一个字段是description,其中应包含 NPM 包功能的简短描述。
    下一个字段是entry point,它指的是当包被另一个模块导入时将执行的主 Javascript 文件。我们现在可以保留默认值。
    下一个字段是test command,它是为包运行测试而应执行的命令或脚本。我们现在也可以保留默认值。
    下一个字段git repository应包含远程 Git 存储库的链接
    下一个字段keywords应包含与我们的包相关的单词,以帮助在 NPM 注册表中建立索引
    下一个字段是author包作者的姓名
    最后一个字段license应包含我们的开源许可证。

  • 安装包依赖项,运行命令 npm install --save-dev typescript ts-node 或 yarn add -D typescript ts-node

  • 设置 tsconfig.json,运行命令 npx tsc --init,它将在我们的项目的基础上创建一个 tsconfig 文件。

  • 将字段更新outDir为 dist

  • 创建src文件夹后创建index.ts文件并粘贴下面的代码:

export function add(a: number, b: number): number {return a + b;
}console.log(add(3, 5)); // 8

使用 npx ts-node src/index 命令运行代码,我们应该在控制台中看到结果。之后删除console.log代码中的行。

  • 初始化你的 git 仓库git init
    创建一个.gitignore文件并将以下内容粘贴到该文件中
/node_modules # 忽略测试相关文件
/coverage.data 
/coverage/ # 构建文件
/dist

创建一个README.md包含项目描述以及如何使用它。

构建 Typescript 包

现在我们已经完成了包的代码编写,我们将继续讨论如何构建我们的包,以便最终用户能够在其各种 javascript 或 typescript 项目中使用它。

现在有各种专用的构建工具可以帮助完成此过程,例如 tsup、babel、webpack、rollup 等,但在本文中我们将重点看看 tsup

安装 tsup

通过运行 npm install tsup -D 或者 yarn add tsup --dev 命令将 tsup 添加到我们的项目。

创建我们的tsup.config.ts文件并粘贴下面的代码

import { defineConfig } from "tsup";export default defineConfig({entry: ["src/index.ts"],format: ["cjs", "esm"], // 构建 commonJS 和 ESmodules dts: true, // 生成声明文件 (.d.ts )splitting: false,sourcemap: true,clean: true,
});

使用以下内容更新 package.json 中的 scripts

 "scripts": {"build": "tsup","test": "echo \"Error: no test specified\" && exit 1"},

我们现在可以通过运行 npm run build 或 yarn build 构建我们的项目
更新我们 package.json 文件中的 main 并添加以下内容:

"main": "./dist/index.js",
"module": "./dist/index.mjs",
"types": "./dist/index.d.ts",
"files": ["dist"],

现在我们的包应该已准备好发布,但在此之前我们必须测试包以确保代码没问题。

测试 NPM 包

测试使我们能够在任何问题或错误到达我们的用户之前发现并解决它们。要为 npm 包编写测试,我们需要使用 jest。

安装 jest

通过运行 npm install -D jest ts-jest @types/jest 或 yarn add -D jest ts-jest @types/jest 命令将 jest 添加到我们的项目中。

将 jest.config.js 文件添加到我们的项目并添加以下内容

module.exports = {preset: "ts-jest",testEnvironment: "node",
};

在项目中创建一个 tests 文件夹,并创建一个 add.test.ts 文件并添加以下测试代码:

import { add } from '../src';test('adds two numbers correctly', () => {const result = add(2, 3);expect(result).toBe(5);
});

更新 package.json 中的 scripts:

"scripts": {"build": "tsup","test": "jest"},

使用 npm run test 或 yarn test 命令运行测试脚本。结果应该如下图所示:

在这里插入图片描述

发布我们的 NPM 包

最后,在将包发布到 NPM 注册表之前,发布它并在本地计算机上测试它非常重要,以确保其正确性、功能性以及与其他模块或依赖项的兼容性。本地测试使我们可以尽早发现任何问题或错误,并在向公众发布软件包之前进行必要的改进

在本地发布 NPM 包

  • 在包的根目录运行 npm link 命令

  • 在本例中创建另一个测试项目并在本地通过命令 npm link name-of-package 链接到我们的 npm 包 (比如 npm link npm-demo-ts)

  • 在我们的测试项目中创建一个main.ts文件并导入我们的包以对其进行测试。

在这里插入图片描述

将 NPM 包发布到 NPM 注册表

  • 如果我们还没有NPM帐户,请创建一个帐户。
  • 在命令行中登录(npm login)我们的 NPM 帐户
  • 使用 npm publish 命令发布我们的包

结论

使用 TypeScript 进行包开发和使用会带来许多好处。其静态类型使开发人员能够提高代码质量、早期错误检测和增强的编辑器支持。TypeScript 的类型定义可以提供更好的文档并增强对包 API 的理解,促进无缝集成并减少使用者的潜在错误。此外,TypeScript 的生态系统拥有广泛的库、工具和资源,促进协作和社区支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/235805.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RNN:文本生成

文章目录 一、完整代码二、过程实现2.1 导包2.2 数据准备2.3 字符分词2.4 构建数据集2.5 定义模型2.6 模型训练2.7 模型推理 三、整体总结 采用RNN和unicode分词进行文本生成 一、完整代码 作者在文章开头地址中使用C实现了这一过程,为了便于理解,这里我…

智跃人力资源管理系统 SQL注入漏洞复现

0x01 产品简介 智跃人力资源管理系统是基于B/S网页端广域网平台,一套考勤系统即可对全国各地多个分公司进行统一管控,成本更低。信息共享更快。跨平台,跨电子设备 0x02 漏洞概述 智跃人力资源管理系统GenerateEntityFromTable.aspx接口处存在…

生成对抗网络(GAN)手写数字生成

文章目录 一、前言二、前期工作1. 设置GPU(如果使用的是CPU可以忽略这步) 二、什么是生成对抗网络1. 简单介绍2. 应用领域 三、网络结构四、构建生成器五、构建鉴别器六、训练模型1. 保存样例图片2. 训练模型 七、生成动图 一、前言 我的环境&#xff1…

centos服务器安装docker和Rabbitmq

centos服务器 一 centos安装docker1 安装docker所需要的依赖包2配置yum源3查看仓库中所有的docker版本4安装docker5 设置docker为开机自启6验证docker是否安装成功 二 使用docker安装RabbitMQ拉取RabbitMQ镜像创建并运行容器 一 centos安装docker 1 安装docker所需要的依赖包 …

电脑投屏到电视的软件,Mac,Linux,Win均可使用

电脑投屏到电视的软件,Mac,Linux,Win均可使用 AirDroid Cast的TV版,可以上笔记本电脑或台式电脑直接投屏到各种安卓电视上。 无线投屏可以实现本地投屏及远程投屏,AirPlay协议可以实现本地投屏,大家可以按需…

免费使用GPT的网站

登录ChatGPT系统 登录ChatGPT系统 登录ChatGPT系统

snat与dnat

一.SNAT的原理介绍 1.应用环境 局域网主机共享单个公网IP地址接入Internet (私有IP不能在Internet中正常路由) 2.SNAT原理 源地址转换,根据指定条件修改数据包的源IP地址,通常被叫做源映谢 数据包从内网发送到公网时&#xf…

【raect.js + hooks】useRef 搭配 Houdini 创造 useRipple

水波纹点击特效 really cool,实现水波纹的方案也有很多,笔者经常使用 material 组件,非常喜欢 mui 中的 ripple,他家的 ripple 特效就是通过 css Houdini 实现的。 今天,我们将复刻一个 ripple,并封装成 ho…

使用Python脚本实现图片合成PDF功能

目录 一、所需库 二、图片合成PDF的实现过程 三、完整的代码示例 四、注意事项 总结 在Python中,我们可以使用一些强大的库来实现图片合成PDF的功能。这个过程主要包括读取图片文件、将图片按照指定的顺序合并以及生成PDF文件。下面,让我们一起探索…

HX3002入耳检测光感驱动调试-感0x08 寄存器溢出,不变化错误问题解决方法

是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务,+群赠送语音信号处理降噪算法,蓝牙耳机音频,DSP音频项目核心开发资料, 读取光感0x08 寄存器溢出,不变化错误问题?原因 原因:没有读取到0x08数据,没有读0x…

SS6811H38V/1.6A 两通道 H 桥驱动芯片

SS6811H 为舞台灯光和其它电机一体化应用 提供一种双通道集成电机驱动方案。SS6811H 有 两路 H 桥驱动,每个 H 桥可提供最大输出电流 1.6A (在 24V 和 Ta 25C 适当散热条件下),可驱 动两个刷式直流电机,或者一个双极步进电机,或 …

ESP32-Web-Server编程- 使用表格(Table)实时显示设备信息

ESP32-Web-Server编程- 使用表格(Table)实时显示设备信息 概述 上节讲述了通过 Server-Sent Events(以下简称 SSE) 实现在网页实时更新 ESP32 Web 服务器的传感器数据。 本节书接上会,继续使用 SSE 机制在网页实时显…