使用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.mzph.cn/news/186803.shtml

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

相关文章

python实现two way ANOVA

文章目录 目的:用python实现two way ANOVA 双因素方差分析1. python代码实现1 加载python库2 加载数据3 统计样本重复次数,均值和方差,绘制箱线图4 查看people和group是否存在交互效应5 模型拟合与Two Way ANOVA:双因素方差分析6 …

LeetCode(34)有效的数独【矩阵】【中等】

目录 1.题目2.答案3.提交结果截图 链接: 36. 有效的数独 1.题目 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗…

[原创][3]探究C#多线程开发细节-“用ConcurrentQueue<T>解决多线程的无顺序性的问题“

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XXQQ: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi…

Unity随笔1 - 安卓打包JDK not found

今天遇到一个很奇怪的事情,之前可以正常打安卓包,但是突然报错如下: 提示很明显,找不到JDK了。可是我在下载Unity的时候明明安装了所有需要的组件,为什么今天突然不行。 看了眼Unity hub里面,没问题。 那就…

MySQL表的查询、更新、删除

查询 全列查询 指定列查询 查询字段并添加自定义表达式 自定义表达式重命名 查询指定列并去重 select distinct 列名 from 表名 where条件 查询列数据为null的 null与 (空串)是不同的! 附:一般null不参与查询。 查询列数据不为null的 查询某列数据指定…

概念理论类-k8s :架构篇

转载:新手通俗易懂 k8s :架构篇 Kubernetes,读音是[kubə’netis],翻译成中文就是“库伯奈踢死”。当然了,也可以直接读它的简称:k8s。为什么把Kubernetes读作k8s,因为Kubernetes中间有8个字母…

ssm+java车辆售后维护系统 springboot汽车保养养护管理系统+jsp

以前汽车维修人员只是在汽车运输行业中从事后勤保障工作,随着我国经济的发展,汽车维修行业已经从原来的从属部门发展成了如今的功能齐备的独立企业。这种结构的转变,给私营汽修企业和个体汽修企业的发展带来了契机,私营企业和个体维修企业的加入也带动了整个汽修行业的整体水平…

SSM校园组团平台系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 SSM 校园组团平台系统是一套完善的信息系统,结合springMVC框架完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模…

Docker 下载加速

文章目录 方式1:使用 网易数帆容器镜像仓库进行下载。方式2:配置阿里云加速。方式3:方式4:结尾注意 Docker下载加速的原理是,在拉取镜像时使用一个国内的镜像站点,该站点已经缓存了各个版本的官方 Docker 镜…

《金融科技行业2023年专利分析白皮书》发布——科技变革金融,专利助力行业发展

金融是国民经济的血脉,是国家核心竞争力的重要组成部分,金融高质量发展成为2023年中央金融工作的重要议题。《中国金融科技调查报告》中指出,我国金融服务业在科技的助力下,从1.0时代的“信息科技金融”、2.0时代的“互联网金融”…

传统算法: Pygame 实现深度优先搜索(DFS)

使用 Pygame 模块实现了深度优先搜索(DFS)的动画演示。首先,它通过邻接矩阵表示了一个图的结构,其中每个节点表示一个字符,每个字符的邻居表示与之相邻的节点。然后,通过深度优先搜索算法递归地访问所有节点,过程中通过动画效果可视化每一步的变化。每次访问一个节点,该…

Goby 漏洞发布| CrushFTP as2-to 认证权限绕过漏洞(CVE-2023-43177)

漏洞名称: CrushFTP as2-to 认证权限绕过漏洞(CVE-2023-43177) English Name:CrushFTP as2-to Authentication Permission bypass Vulnerability (CVE-2023-43177) CVSS core: 9.8 影响资产数: 38695 漏洞描述&…

什么是透明加密技术?透明加密有哪些优势?

透明加密技术是一种特殊的加密方法,它在用户毫不知情的情况下对数据进行加密和解密,保障了数据的安全性。用户在使用这种加密技术时,无需改变他们的日常操作习惯,加密和解密过程在后台自动进行,使得用户在享受数据安全…

C语言--有三个字符串,要求找出其中长度最大的那一个

一.题目描述 有三个字符串,要求找出其中长度最大的那一个。 比如:输入三个字符串是: 第一个字符串:hello 第二个字符串:worldasd 第三个字符串:abcd 输出:最长的字符串是:worldasd 二.思路分析…

webpack优化打包速度

webpack打包速度太慢 优化 1.多线程打包 js压缩和loader 2.优化启动速度 hard-source-webpack-plugin 3.删除无用的 分析类插件 4.DllPlugin通道打包 1.webpack多线程打包 loader loader 使用 thread-loader 将他放置你要使用的loader前面就行,不过这个lorder例如s…

基于51单片机的数字电压表设计

1.设计任务 利用AT89C51单片机为核心控制元件,设计一个简易的数字电压表,设计的系统实用性强、操作简单,实现了智能化、数字化。 基本要求:利用单片机AT89C51设计数字电压表,能对模拟信号进行检测,能将所…

STC15-串口通信打印输出数据printf函数与sprintf函数

STC15-串口通信打印输出数据printf函数与sprintf函数 1.打印输出数据有二种printf函数与sprintf函数,不同之处有:(1)函数的声明不同(2)函数的功能不同(3)用法举例 该问题引用百度知道…

2的幂运算

2的幂 描述 : 给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。 如果存在一个整数 x 使得 n 2x ,则认为 n 是 2 的幂次方。 题目 : LeetCode 231.2的幂 : 231. 2 的幂 分…

SpringBoot中的部分注解

1.SpringBoot/spring SpringBootApplication: 包含Configuration、EnableAutoConfiguration、ComponentScan通常用在主类上; Repository: 用于标注数据访问组件,即DAO组件; Service: 用于标注业务层组件; RestController: 用…

中国毫米波雷达产业分析3——毫米波雷达市场分析(四、五、六)

四、康养雷达市场 (一)市场背景 1、政府出台系列政策提升智慧健康养老产品供给和应用 康养雷达是一种以老年人为主要监测对象,可以实现人体感应探测、跌倒检测报警、睡眠呼吸心率监测等重要养老监护功能的新型智慧健康养老产品。 随着我国经…