教你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 相关文章推荐
JS 分号引起的一段调试问题
Jun 18 Javascript
利用jQuery的$.event.fix函数统一浏览器event事件处理
Dec 21 Javascript
jQuery.autocomplete 支持中文输入(firefox)修正方法
Mar 10 Javascript
javascript的内存管理详解
Aug 07 Javascript
原生javascript+css3编写的3D魔方动画旋扭特效
Mar 14 Javascript
JQuery和HTML5 Canvas实现弹幕效果
Jan 04 Javascript
原生js实现无限循环轮播图效果
Jan 20 Javascript
ionic选择多张图片上传的示例代码
Oct 10 Javascript
JS严格模式知识点总结
Feb 27 Javascript
详解JavaScript 浮点数运算的精度问题
Jul 23 Javascript
vue实现移动端触屏拖拽功能
Aug 21 Javascript
js异步接口并发数量控制的方法示例
Nov 22 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
让CodeIgniter数据库缓存自动过期的处理的方法
2014/06/12 PHP
php字符串替换函数substr_replace()用法实例
2015/03/17 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
javascript oop开发滑动(slide)菜单控件
2010/08/25 Javascript
js实现翻页后保持checkbox选中状态的实现方法
2012/11/03 Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
2015/12/01 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
2016/06/22 Javascript
vue学习笔记之vue1.0和vue2.0的区别介绍
2017/05/17 Javascript
自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结
2017/08/18 Javascript
jquery动态赋值id与动态取id方法示例
2017/08/21 jQuery
基于js中this和event 的区别(详解)
2017/10/24 Javascript
Mac下安装vue
2018/04/11 Javascript
微信小程序自定义select下拉选项框组件的实现代码
2018/08/28 Javascript
[48:54]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第二场 6.3
2018/06/04 DOTA
对python中return和print的一些理解
2017/08/18 Python
pycharm 主题theme设置调整仿sublime的方法
2018/05/23 Python
Python GUI Tkinter简单实现个性签名设计
2018/06/19 Python
python使用zip将list转为json的方法
2018/12/31 Python
python3实现zabbix告警推送钉钉的示例
2019/02/20 Python
PyQt4实时显示文本内容GUI的示例
2019/06/14 Python
Python 类的私有属性和私有方法实例分析
2019/09/29 Python
python+opencv实现车道线检测
2021/02/19 Python
Solaris操作系统的线程机制
2015/07/28 面试题
文员个人求职自荐信
2013/09/21 职场文书
电子商务专业学生职业生涯规划
2014/03/07 职场文书
绩效管理实施方案
2014/03/19 职场文书
最美护士演讲稿
2014/08/27 职场文书
学习十八大的心得体会
2014/09/01 职场文书
党员自我评议个人对照检查材料
2014/09/16 职场文书
群众路线教育实践活动个人对照检查材料思想汇报(社区班子)
2014/10/06 职场文书
婚礼新人答谢词
2015/01/04 职场文书
廉政党课工作报告案例
2019/06/21 职场文书
Mysql案例刨析事务隔离级别
2021/09/25 MySQL
《原神》新角色演示“神里绫人:林隐泓洄” 宠妹狂魔
2022/04/03 其他游戏
基于CSS制作创意端午节专属加载特效
2022/06/01 HTML / CSS
win10如何更改appdata文件夹的默认位置?
2022/07/15 数码科技