教你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下string.format函数补充
Aug 24 Javascript
基于jquery的$.ajax async使用
Oct 19 Javascript
js 获取计算后的样式写法及注意事项
Feb 25 Javascript
js动态调用css属性的小规律及实例说明
Dec 28 Javascript
jQuery仿天猫实现超炫的加入购物车
May 04 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
Nov 07 Javascript
jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解
Jan 19 Javascript
从零开始最小实现react服务器渲染详解
Jan 26 Javascript
JS实现的简单分页功能示例
Aug 23 Javascript
js取0-9随机取4个数不重复的数字代码实例
Mar 27 Javascript
解决vue elementUI 使用el-select 时 change事件的触发问题
Nov 17 Vue.js
手把手教你从零开始react+antd搭建项目
Jun 03 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
Syphon 秘笈
2021/03/03 冲泡冲煮
人大复印资料处理程序_查询篇
2006/10/09 PHP
APACHE的AcceptPathInfo指令使用介绍
2013/01/18 PHP
php获取textarea的值并处理回车换行的方法
2014/10/20 PHP
php 字符串中是否包含指定字符串的多种方法
2018/04/12 PHP
Laravel 集成 Geetest验证码的方法
2018/05/14 PHP
jQuery中(function(){})()执行顺序的理解
2013/03/05 Javascript
一个封装js代码-----展开收起效果示例
2013/07/03 Javascript
JSONP获取Twitter和Facebook文章数的具体步骤
2014/02/24 Javascript
JavaScript中的getTime()方法使用详解
2015/06/10 Javascript
简述AngularJS的控制器的使用
2015/06/16 Javascript
JS+DIV+CSS实现的经典标签切换效果代码
2015/09/14 Javascript
vue通过路由实现页面刷新的方法
2018/01/25 Javascript
微信小程序在线客服自动回复功能(基于node)
2019/07/03 Javascript
浅入深出Vue之组件使用
2019/07/11 Javascript
一篇文章弄懂javascript中的执行栈与执行上下文
2019/08/09 Javascript
[40:57]TI4 循环赛第二日 iG vs EG
2014/07/11 DOTA
[01:17:55]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
python中的多重继承实例讲解
2014/09/28 Python
Python设计模式编程中Adapter适配器模式的使用实例
2016/03/02 Python
对Python字符串中的换行符和制表符介绍
2018/05/03 Python
Django框架反向解析操作详解
2019/11/28 Python
python 读写文件包含多种编码格式的解决方式
2019/12/20 Python
Python学习工具jupyter notebook安装及用法解析
2020/10/23 Python
css3.0 图形构成实例练习二
2013/03/19 HTML / CSS
经典c++面试题二
2015/08/14 面试题
涉外文秘个人求职的自我评价
2013/10/07 职场文书
公司前台辞职报告
2014/01/19 职场文书
学生会副主席竞聘书
2014/03/31 职场文书
项目经理任命书
2014/06/04 职场文书
2014年社区党建工作总结
2014/11/11 职场文书
导游词格式
2015/02/13 职场文书
学生个人总结范文
2015/02/15 职场文书
小学生表扬稿范文
2015/05/05 职场文书
六年级数学教学反思
2016/02/16 职场文书
2019脱贫攻坚工作总结报告范本!
2019/08/06 职场文书