教你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 相关文章推荐
新浪中用来显示flash的函数
Apr 02 Javascript
js字符串转成JSON
Nov 07 Javascript
用jquery写的菜单从左往右滑动出现
Apr 11 Javascript
js获取鼠标点击的位置实现思路及代码
May 09 Javascript
angularJS 中$scope方法使用指南
Feb 09 Javascript
Javascript中的getUTCDay()方法使用详解
Jun 10 Javascript
在JavaScript中使用JSON数据
Feb 15 Javascript
jQuery实现级联下拉框实战(5)
Feb 08 Javascript
JS实现页面打印功能
Mar 16 Javascript
Vue实现搜索 和新闻列表功能简单范例
Mar 16 Javascript
基于JavaScript实现单例模式
Oct 30 Javascript
适合后台管理系统开发的12个前端框架(小结)
Jun 29 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
WordPress中Gravatar头像缓存到本地及相关优化的技巧
2015/12/19 PHP
Twig模板引擎用法入门教程
2016/01/20 PHP
PHP计算日期相差天数实例分析
2016/02/23 PHP
php版微信小店调用api示例代码
2016/11/12 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
(仅IE下有效)关于checkbox 三态
2007/05/12 Javascript
javascript类继承机制的原理分析
2009/09/12 Javascript
基于jQuery的history历史记录插件
2010/12/11 Javascript
Javascript/Jquery——简单定时器的多种实现方法
2013/07/03 Javascript
Bootstrap实现登录校验表单(带验证码)
2016/06/23 Javascript
浅谈angularJS中的事件
2016/07/12 Javascript
JavaScript实现跟随滚动缓冲运动广告框
2017/07/15 Javascript
基于react后端渲染模板引擎noox发布使用
2018/01/11 Javascript
详解自定义ajax支持跨域组件封装
2018/02/08 Javascript
解决vue中post方式提交数据后台无法接收的问题
2018/08/11 Javascript
vue组件暴露和.js文件暴露接口操作
2020/08/11 Javascript
openlayers实现地图测距测面
2020/09/25 Javascript
Python编程入门的一些基本知识
2015/05/13 Python
python 调用win32pai 操作cmd的方法
2017/05/28 Python
Python利用matplotlib做图中图及次坐标轴的实例
2019/07/08 Python
Python中变量的输入输出实例代码详解
2019/07/28 Python
解决ROC曲线画出来只有一个点的问题
2020/02/28 Python
Keras自动下载的数据集/模型存放位置介绍
2020/06/19 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
2020/08/28 Python
python -v 报错问题的解决方法
2020/09/15 Python
Python包资源下载路径报404解决方案
2020/11/05 Python
美国波道夫·古德曼百货官网:Bergdorf Goodman
2017/11/07 全球购物
大学生的四年学习自我评价
2013/12/13 职场文书
车间操作工岗位职责
2013/12/19 职场文书
对公司合理化的建议书
2014/03/12 职场文书
经贸日语专业个人求职信范文
2014/04/29 职场文书
大二学生自我检讨书
2014/10/23 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
2015年村级财务管理制度
2015/08/04 职场文书
简单谈谈Python面向对象的相关知识
2021/06/28 Python