教你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 相关文章推荐
动态调用css文件——jquery的应用
Feb 20 Javascript
YUI 读码日记之 YAHOO.util.Dom - Part.1
Mar 22 Javascript
JQuery 插件制作实践 xMarquee插件V1.0
Apr 02 Javascript
js限制文本框为整数和货币的函数代码
Oct 13 Javascript
利用try-catch判断变量是已声明未声明还是未赋值
Mar 12 Javascript
AngularJS中的API(接口)简单实现
Jul 28 Javascript
AngularJs定制样式插入到ueditor中的问题小结
Aug 01 Javascript
简单实现JS倒计时效果
Dec 23 Javascript
JavaScript递归算法生成树形菜单
Aug 15 Javascript
vue-cli整合vuex的时候,修改actions和mutations,实现热部署的方法
Sep 19 Javascript
微信小程序实现3D轮播图效果(非swiper组件)
Sep 21 Javascript
javascript实现搜索筛选功能实例代码
Nov 12 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实现汉字验证码和算式验证码的方法
2015/03/07 PHP
prototype 1.5相关知识及他人笔记
2006/12/16 Javascript
javascript offsetX与layerX区别
2010/03/12 Javascript
js中eval详解
2012/03/30 Javascript
jQuery异步获取json数据方法汇总
2014/12/22 Javascript
jQuery实现企业网站横幅焦点图切换功能实例
2015/04/30 Javascript
详解Javascript模板引擎mustache.js
2016/01/20 Javascript
jQuery中的each()详细介绍(推荐)
2016/05/25 Javascript
前端分页功能的实现以及原理(jQuery)
2017/01/22 Javascript
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
2017/08/23 jQuery
jQuery结合jQuery.cookie.js插件实现换肤功能示例
2017/10/14 jQuery
vue router-link传参以及参数的使用实例
2017/11/10 Javascript
Node.js readline 逐行读取、写入文件内容的示例
2018/03/01 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
2018/05/21 Javascript
这15个Vue指令,让你的项目开发爽到爆
2019/10/11 Javascript
react基本安装与测试示例
2020/04/27 Javascript
[00:32]2018DOTA2亚洲邀请赛EG出场
2018/04/03 DOTA
举例讲解Python面向对象编程中类的继承
2016/06/17 Python
Python实现字符串匹配算法代码示例
2017/12/05 Python
详解python string类型 bytes类型 bytearray类型
2017/12/16 Python
Pandas实现数据类型转换的一些小技巧汇总
2018/05/07 Python
python反编译学习之字节码详解
2019/05/19 Python
Python中的 sort 和 sorted的用法与区别
2019/08/10 Python
Pytorch中的自动求梯度机制和Variable类实例
2020/02/29 Python
Canvas实现保存图片到本地的示例代码
2018/06/28 HTML / CSS
如何写出高性能的JSP和Servlet
2013/01/22 面试题
行政助理求职自荐信
2013/10/26 职场文书
编辑硕士自荐信范文
2013/11/27 职场文书
资产经营总监岗位职责范文
2013/12/01 职场文书
大学生国庆节65周年演讲稿范文
2014/09/25 职场文书
大学生自荐材料范文
2014/12/30 职场文书
2015年四年级班主任工作总结
2015/10/22 职场文书
公司团队口号霸气押韵
2015/12/24 职场文书
《我是什么》教学反思
2016/02/16 职场文书
python基础入门之字典和集合
2021/06/13 Python
springboot读取nacos配置文件
2022/05/20 Java/Android