教你30秒发布一个TypeScript包到NPM的方法步骤


Posted in Javascript onJuly 22, 2019

文章读译自The 30 second guide to publishing a typescript package to npm,部分内容有修改哈。

这篇文章要求你有一定的 JS 、TS 和 NPM 的知识,如果你写过普通的 NPM 包就更好啦~如果没有的话网上也很多教程的,都很简单~

发布过 npm 包的同学都知道,初始化一个 npm 项目,直接用 npm init -y 就可以了,那如果要用 ts 呢,直接 tsc --init 即可。这两个操作会生成 package.json 和 tsconfig.json 文件。然后我们按以下步骤修改一下配置:

1. 添加 "declaration": true 到你的 tsconfig.json

这行语句告诉 TypsScript 在编译的时候为你自动生成 d.ts 文件。需要注意的是,当你使用私有的类型时,但是这个类型也外部 API 的一部分,这个包的使用者就得不到该类型的类型推断,TS 编译器也会报警告,这时你只需要在该类型前添加 export 即可。

2. 添加 "types": "index.d.ts" 到你的 package.json

当其他人导入你的包的时候,这句话就告诉了 TS 编译器到哪里去寻找类型定义文件。这里的 .d.ts 文件和 main 入口指向的是一个文件夹,所以通常情况下,你的 package.json 会包含下面两行:

"main": "dist/index.js",
"types": "dist/index.d.ts"

(上面默认你在 tsconfig.json 中配置的 outDir 指向的是 dist 目录)

3. 保证你的 dist 目录被添加到了 .gitignore

在我们的代码仓库,一般不需要包含编译后的代码,只需要包含源码即可。所以我们不对 dist 目录做版本管理。并且这也不影响我们发布 dist 目录到 npm。

4. 运行构建命令

运行 tsc 即可编译所有的源码。这非常方便,通常情况下,我们可以添加一条命令到 package.json:

"build": "tsc"

5. 运行 npm publish

接下来就是要发布到 npm 了,在 package.json 添加以下命令:

"release": "tsc && npm publish"

笔者习惯使用 standard-version 配合 commitizen 来发布 npm 包,感兴趣的同学可以自行了解一下~

如果想要在发布前调试本地包,可以使用 npm link 命令,在此项目根目录执行npm link, 然后在要调试的 demo 项目中执行 npm link <your package name>,然后在代码中直接引入使用即可。

下面是完成配置后的 package.json:

{
  "name": "my-ts-lib",
  "version": "1.0.0",
  "description": "My npm package written in TS",
  "main": "dist/index.js",
  "types": "dist/index.d.ts",
  "scripts": {
    "build": "tsc",
    "release": "tsc && npm publish"
  },
  "author": "savokiss",
  "license": "MIT",
  "devDependencies": {
    "typescript": "^3.5.3"
  }
}

下面是最终的 tsconfig.json:

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "lib": ["es2017", "es7", "es6", "dom"],
    "declaration": true,
    "outDir": "dist",
    "strict": true,
    "esModuleInterop": true
  },
  "exclude": ["node_modules", "dist"]
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript自定义方法实现trim()、Ltrim()、Rtrim()的功能
Nov 03 Javascript
Javascript优化技巧之短路表达式详细介绍
Mar 27 Javascript
javascript检查某个元素在数组中的索引值
Mar 30 Javascript
js添加事件的通用方法推荐
May 15 Javascript
javascript url几种编码方式详解
Jun 06 Javascript
BootStrap glyphicon图标无法显示的解决方法
Sep 06 Javascript
详解前端自动化工具gulp自动添加版本号
Dec 20 Javascript
JavaScript转换数据库DateTime字段类型方法
Jun 27 Javascript
node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能
Jan 12 Javascript
JavaScript自动生成 年月范围 选择功能完整示例【基于jQuery插件】
Sep 03 jQuery
js将日期格式转换为YYYY-MM-DD HH:MM:SS
Sep 18 Javascript
ant design charts 获取后端接口数据展示
May 25 Javascript
详解vue为什么要求组件模板只能有一个根元素
Jul 22 #Javascript
微信小程序获取用户绑定手机号方法示例
Jul 21 #Javascript
Vue商品控件与购物车联动效果的实例代码
Jul 21 #Javascript
浅析Angular 实现一个repeat指令的方法
Jul 21 #Javascript
Node.js 实现简单的无侵入式缓存框架的方法
Jul 21 #Javascript
Vue中遍历数组的新方法实例详解
Jul 21 #Javascript
Vue项目中使用WebUploader实现文件上传的方法
Jul 21 #Javascript
You might like
php 函数中使用static的说明
2012/06/01 PHP
PHP错误和异常处理功能模块示例
2016/11/12 PHP
PHP封装的非对称加密RSA算法示例
2018/05/28 PHP
laravel实现查询最后执行的一条sql语句的方法
2019/10/09 PHP
不错的JS中变量相关的细节分析
2007/08/13 Javascript
js变量以及其作用域详解
2020/07/18 Javascript
js四舍五入数学函数round使用实例
2014/05/09 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
2015/02/13 Javascript
jQuery插件实现适用于移动端的地址选择器
2016/02/18 Javascript
前端微信支付js代码
2016/07/25 Javascript
Bootstrap进度条与AJAX后端数据传递结合使用实例详解
2017/04/23 Javascript
JS使用正则表达式验证身份证号码
2017/06/23 Javascript
jQuery选择器之属性过滤选择器详解
2017/09/28 jQuery
bootstrap datetimepicker控件位置异常的解决方法
2017/11/23 Javascript
Vue路由管理器Vue-router的使用方法详解
2020/02/05 Javascript
JavaScript封装单向链表的示例代码
2020/09/17 Javascript
Python实现CET查分的方法
2015/03/10 Python
Python实现字典去除重复的方法示例
2017/07/31 Python
python difflib模块示例讲解
2017/09/13 Python
python3.7 利用函数os pandas利用excel对文件名进行归类
2019/09/29 Python
python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)
2020/03/09 Python
基于python实现上传文件到OSS代码实例
2020/05/09 Python
澳大利亚电子产品购物网站:Dick Smith
2017/02/02 全球购物
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
澳洲女装时尚在线:Blue Bungalow
2018/05/05 全球购物
大学生就业自荐信
2013/10/26 职场文书
工业设计专业推荐信
2013/10/29 职场文书
仓库门卫岗位职责
2013/12/22 职场文书
电工工作职责范本
2014/02/22 职场文书
《荷花》教学反思
2014/04/16 职场文书
安全生产专项整治方案
2014/05/06 职场文书
党员廉洁自律承诺书
2014/05/26 职场文书
党的群众路线领导班子整改方案
2014/09/27 职场文书
2014年外联部工作总结
2014/11/17 职场文书
大学宣传委员竞选稿
2015/11/19 职场文书
CSS3 Tab动画实例之背景切换动态效果
2021/08/23 HTML / CSS