教你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 相关文章推荐
jquery 的 $(&quot;#id&quot;).html() 无内容的解决方法
Jun 07 Javascript
三种动态加载js的jquery实例代码另附去除js方法
Apr 30 Javascript
Jquery左右滑动插件之实现超级炫酷动画效果附源码下载
Dec 02 Javascript
JS获取子窗口中返回的数据实现方法
May 28 Javascript
对javascript继承的理解
Oct 11 Javascript
Bootstrap企业网站实战项目4
Oct 14 Javascript
浅谈JS验证表单文本域输入空格的问题
Feb 14 Javascript
Vue 2.0中生命周期与钩子函数的一些理解
May 09 Javascript
解决Layui选择全部,换页checkbox复选框重新勾选的问题方法
Aug 14 Javascript
通过图带你深入了解vue的响应式原理
Jun 21 Javascript
vue-cli设置css不生效的解决方法
Feb 07 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
Jul 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
php 常用字符串函数总结
2008/03/15 PHP
PHP fopen 读取带中文URL地址的一点见解
2012/09/25 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
2013/10/16 PHP
PHP伪造来源HTTP_REFERER的方法实例详解
2015/07/06 PHP
javascript 函数速查表
2010/02/07 Javascript
JQuery实现的在新窗口打开链接的方法小结
2010/04/22 Javascript
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
一张表格告诉你windows.onload()与$(document).ready()的区别
2014/05/16 Javascript
iframe里的页面禁止右键事件的方法
2014/06/10 Javascript
原生js和jQuery实现淡入淡出轮播效果
2015/12/25 Javascript
最棒的Angular2表格控件
2016/08/10 Javascript
vue实现移动端图片裁剪上传功能
2020/08/18 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
Python 循环语句之 while,for语句详解
2018/04/23 Python
tensorflow实现简单的卷积网络
2018/05/24 Python
pip安装时ReadTimeoutError的解决方法
2018/06/12 Python
python针对不定分隔符切割提取字符串的方法
2018/10/26 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
python适合人工智能的理由和优势
2019/06/28 Python
Atom Python 配置Python3 解释器的方法
2019/08/28 Python
pytorch之inception_v3的实现案例
2020/01/06 Python
flask框架蓝图和子域名配置详解
2020/01/25 Python
使用python把xmind转换成excel测试用例的实现代码
2020/10/12 Python
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
全球独特生活方式产品和礼品购物网站:AHAlife
2018/09/18 全球购物
会计电算化毕业生自荐信
2014/03/03 职场文书
总经理助理的职责
2014/03/14 职场文书
2015年技术工作总结范文
2015/04/20 职场文书
违反纪律检讨书范文
2015/05/07 职场文书
幼儿园教师管理制度
2015/08/05 职场文书
护士爱岗敬业心得体会
2016/01/25 职场文书
创业计划书之寿司
2019/07/19 职场文书
感恩信:写给爸爸妈妈的一封感谢信
2019/09/12 职场文书
用python开发一款操作MySQL的小工具
2021/05/12 Python
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL